使用URL创建对象的应用程序称为客户端程序。

URL对象调用InputStream openStream()方法可以返回一个输入流,该输入流指向URL对象所包含的资源。

InetAddress类可以将域名和IP地址一起输出。

如:

InetAddress address = InetAddress.getByName("www.sina.com.cn");

网络通信使用IP地址标识Internet上的计算机,使用端口号标识服务器上的进程(程序)。

网络通信使用IP地址标识Internet上的计算机,使用端口号标识服务器上的进程。

客户端程序使用Socket类建立负责连接到服务器的套接字对象。

Socket的构造方法是Socket(String host, int port),参数host是服务器的IP地址,port是一个端口号。

当套接字对象clientSocket建立后,clientSocket可以使用方法getInputStream()获得一个输入流,这个输入流的源和服务器的一个输出流的目的地刚好相同,一次客户端用输入流可以获取一个输出流中的数据;clientSocket使用方法getOutputStream()获得一个输出流,这个输出流的目的地和服务器端的一个输入流的源刚好相同,因此服务器用输入流可以读取客户写入到输出流的数据。

客户负责呼叫

为了能使客户成功地连接到服务器,服务器必须建立一个ServerSocket对象。

ServerSocket的构造方法是ServerSocket(int port),port是一个端口号。port必须和客户端呼叫的端口号相同。

当服务器的ServerSocket对象serverForClient建立后,就可以使用方法accept()将客户端的套接字和服务器端的套接字连接起来。

Client.java

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.Socket; public class Client { public static void main(String[] args) {
// TODO Auto-generated method stub
String [] mess = {"2010世界杯在哪举行?", "巴西进入世界杯了吗?", "中国进入世界杯了吗?"};
Socket mysocket;
DataInputStream in = null;
DataOutputStream out = null; try {
mysocket = new Socket("127.0.0.1", 2010);
in = new DataInputStream(mysocket.getInputStream());
out = new DataOutputStream(mysocket.getOutputStream());
for(int i = 0; i < 3; i++)
{
out.writeUTF(mess[i]);
String s = in.readUTF();
System.out.println("客户收到服务器的回答: " + s);
Thread.sleep(500);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } }

Server.java

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket; public class Server { public static void main(String[] args) {
// TODO Auto-generated method stub
String [] answer = {"南非", "进入世界杯了", "哈哈"};
ServerSocket serverForClient = null;
Socket socketOnServer = null;
DataOutputStream out = null;
DataInputStream in = null; try {
serverForClient = new ServerSocket(2010);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} try {
System.out.println("等待客户呼叫");
socketOnServer = serverForClient.accept();
out = new DataOutputStream(socketOnServer.getOutputStream());
in = new DataInputStream(socketOnServer.getInputStream());
for(int i = 0; i < answer.length; i++)
{
String s = in.readUTF();
System.out.println("服务器收到客户的提问:" + s);
out.writeUTF(answer[i]);
Thread.sleep(500);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
}
 

运行结果:

Server.java

Client.java

review40的更多相关文章

随机推荐

  1. Encrypt your home directory

    w

  2. 2014-08-28——移动端,触摸事件 touchstart、touchmove、touchend、touchcancel

    1.Touch事件简介在移动终端上的web页面触屏时会产生ontouchstart.ontouchmove.ontouchend.ontouchcancel 事件,分别对应了触屏开始.拖拽及完成触屏事 ...

  3. Python代码实现删除一个list里面的重复元素

    lst=[11,22,33,44,22,11,22,44] print(list(set(lst))) # 打印结果:[33, 11, 44, 22] d = {} for index,item in ...

  4. Clustered and Secondary Indexes

    Clustered and Secondary Indexes secondary index A type of InnoDB index that represents a subset of t ...

  5. ApexSQL Log 从意外UPDATE和DELETE操作中恢复SQL Server数据

    下载地址:https://www.apexsql.com/download.aspx 如何从意外UPDATE和DELETE操作中恢复SQL Server数据 ApexSQL Log 从意外UPDATE ...

  6. ubuntu常见错误--Could not get lock /var/lib/dpkg/lock解决(转)

    通过终端安装程序sudo apt-get install xxx时出错: E: Could not get lock /var/lib/dpkg/lock - open (11: Resource t ...

  7. python 里安装 tensorflow 后运行出错的问题解决

    如果出现一下错误: libcublas.so.8.0: cannot open shared object file: No such file or directory 原因是没有 cuda 环境, ...

  8. C# 函数3

    //获取部分     public class GF_GET     {         /// <summary>         /// 根据坐标点获取屏幕图像         /// ...

  9. 小计---pandas读取带有中文文件名或者包含中文内容的文件

    python2下: # -*- coding: utf-8 -*- import pandas as pd mydata = pd.read_csv(u"例子.csv") #前面加 ...

  10. 【WEB HTTP】集成点:网关、隧道及中继

    网关:网关可以作为某种翻译器使用,它抽象出了一种能够到达资源的方法.网关是资源与应用程序之间的粘合剂. 在不同http版本之间进行转换的Web代理和网关一样,他们会执行复杂的逻辑,以便在各个端点之间进 ...