目录
TCP通信程序
TCP通信能实现两台计算机之间的数据交互,通信的两端,要严格区分为客户端(Client)与服务端(Server)。
- 客户端:
java.net.Socket
类表示。创建Socket
对象,向服务端发出连接请求,服务端响应请求,两者建立连接开始通信。 - 服务端:
java.net.ServerSocket
类表示。创建ServerSocket
对象,相当于开启一个服务,并等待客户端的连接
客户端Socket类
Socket
类:该类实现客户端套接字,套接字指的是两台设备之间通讯的端点。
构造方法
public Socket(String host, int port) :创建套接字对象并将其连接到指定主机上的指定端口号。如果指定的host是null ,则相当于指定地址为回送地址。
如果回送地址(127.x.x.x) 是本机回送地址(Loopback Address),主要用于网络软件测试以及本地机进程间通信,无论什么程序,一旦使用回送地址发送数据,立即返回,不进行任何网络传输。 构造举例,代码如下:
Socket client = new Socket("127.0.0.1", 6666);
成员方法
- public InputStream getInputStream() : 返回此套接字的输入流。
- 如果此Scoket具有相关联的通道,则生成的InputStream 的所有操作也关联该通道。
- 关闭生成的InputStream也将关闭相关的Socket。
- public OutputStream getOutputStream() : 返回此套接字的输出流。
- 如果此Scoket具有相关联的通道,则生成的OutputStream 的所有操作也关联该通道。
- 关闭生成的OutputStream也将关闭相关的Socket。
- public void close() :关闭此套接字。
- 一旦一个socket被关闭,它不可再使用。
- 关闭此socket也将关闭相关的InputStream和OutputStream 。
- public void shutdownOutput() : 禁用此套接字的输出流。
- 任何先前写出的数据将被发送,随后终止输出流。
客户端ServerSocket类
构造方法
-
public ServerSocket(int port) :使用该构造方法在创建ServerSocket对象时,就可以将其绑定到一个指定的端口号上,参数port就是端口号。
成员方法
public Socket accept() :侦听并接受连接,返回一个新的Socket对象,用于和客户端实现通信。该方法会一直阻塞直到建立连接
列:客户端向服务器发送数据
创建客户端
public class TCPClient {
public static void main(String[] args) throws IOException {
//1 创建客户端对象Socket,构造方法绑定服务器的ip地址和端口号
Socket socket = new Socket("127.0.0.1", 8888);
//2 使用Socket中的getOutputStream对象获取网络字节的输出流OutputStream对像
OutputStream outputStream = socket.getOutputStream();
//3 像服务器传输数据
outputStream.write("你好,我是客户端".getBytes());
//4 使用Socket对象中的方法getInputStream()获取网络字节输入流InputStream对象
InputStream inputStream = socket.getInputStream();
//5 接受网络数据
byte[] bytes = new byte[1024];
int len = inputStream.read(bytes);
System.out.println(new String(bytes,0,len));
//6 释放资源
socket.close();
}
}
创建服务器
public class TCPServer {
public static void main(String[] args) throws IOException {
//1.创建服务器ServerSocket对象和系统要指定的端口号
ServerSocket serverSocket = new ServerSocket(8888);
//2 使用ServerSocket对象中的方法accept,获取到请求的客户端对象Socket
Socket socket = serverSocket.accept();
//3 获取网络字节输入流getInputStream对象中的方法read,读取客户端发送的数据
InputStream inputStream = socket.getInputStream();
//4 读取资源
byte[] bytes = new byte[1024];
int len = inputStream.read(bytes);
System.out.println(new String(bytes,0,len));//输出客户端的信息
//5 使用Socket对象中的方法getOutputStream()获取网络字节输出流OutputStream对象
OutputStream outputStream = socket.getOutputStre