TCP通信
TCP特点:
是一种面向连接的保证可靠的传输协议。通过TCP协议传输,得到的是一个顺序的无差错的数据流。
TCP通信实现的过程:
- 在服务端指定一个端口号来创建ServerSocket,并使用accept方法进行侦听,这样阻塞服务器线程,等待用户请求。
- 在客户端指定服务器的主机IP和端口号来创建Socket,并连接到服务端ServerSocket,此时服务端的accept方法将被唤醒,同时返回一个和客户端通信的Socket。
- 在客户端和服务端分别使用Socket来获得网络通信的输入/输出流,并按照一定的通信协议对Socket进行读/写操作。
- 在通信完成后,在客户端和服务端中分别关闭Socket。
客户端:
package com.ycy3;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
public class Client {
public static void main(String[] args) throws Exception {
InetAddress address = InetAddress.getLocalHost();
String ip = address.getHostAddress();
int port = 11011;
// 利用ip 和 port 构建 socket
Socket socket = new Socket(ip, port);
// 从socket获取输出流
OutputStream outputStream = socket.getOutputStream();
// 写数据
outputStream.write("你好".getBytes());
outputStream.flush();
// 关闭资源
outputStream.close();
socket.close();
}
}
服务端:
package com.ycy3;
import java.io.InputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) throws Exception {
int port = 11011;
// 利用port创建ServerSocket
ServerSocket serverSocket = new ServerSocket(port);
// 接收客户端连接
Socket socket = serverSocket.accept();
// 从socket获取输入流
InputStream inputStream = socket.getInputStream();
// 读取数据
byte[] b = new byte[1024 * 1];
int len = inputStream.read(b);
String message = new String(b, 0, len);
InetAddress localAddress = socket.getLocalAddress();
String ip = localAddress.getHostAddress();
String hostName = localAddress.getHostName();
System.out.println("客户端名:" + hostName);
System.out.println("客户端地址:" + ip);
System.out.println("消息内容:" + message);
socket.close();
serverSocket.close();
}
}