TCP通信服务器端:
接收客户端请求,读取客户端数据并返回数据
表示服务器的类:java.net.ServerSocket
构造方法:
ServerSocket(int port) 创建绑定到特定端口的服务器套接字。
服务器端必须明确是哪个客户端请求的服务器
所以可以用accept()方法获取到连接的客户端Socket对象
成员方法:
Socket accept() 侦听并接受到此套接字的连接。
服务器的实现过程:
1、创建服务器ServerSocket对象,和系统要指定的端口号
2、使用创建服务器ServerSocket对象的accept()方法获取到连接的客户端Socket对象
3、使用Socket 方法中的getOutputStream 获取网络字节输出流InputStream对象
4、使用网络字节输出流InputStream对象中的read()读取客户端发送的数据
5、使用Socket 方法中的getOutputStream()获取网络字节输出流OutputStream对象
6、使用网络字节输出流OutputStream对象中的write写给客户端内容
7、释放资源(Socket,ServerSocket)
public class TCPServer{
public static void main(String[] args) throws IOException {
//1、创建服务器ServerSocket对象,和系统要指定的端口号
ServerSocket ss = new ServerSocket(5055);
//2、使用创建服务器ServerSocket对象的accept()方法获取到连接的客户端Socket对象
Socket socket = ss.accept();
//3、使用Socket 方法中的getOutputStream 获取网络字节输出流InputStream对象
InputStream inputStream = socket.getInputStream();
//4、使用网络字节输出流InputStream对象中的read()读取客户端发送的数据
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.getOutputStream();
//6、使用网络字节输出流OutputStream对象中的write写给客户端内容
outputStream.write("收到嘻嘻!!".getBytes());
//7、释放资源(Socket,ServerSocket)
socket.close();
ss.close();
}
}
TCP客户端:
向服务器发送请求数据,服务器会回复信息
套接字:包含了IP+端口号
构造方法:
Socket(InetAddress address, int port)
创建一个流套接字并将其连接到指定 IP 地址的指定端口号。
参数:InetAddress address 服务器的IP地址;int port服务器的端口号
成员方法:
InputStream getInputStream()
返回此套接字的输入流
OutputStream getOutputStream()
返回此套接字的输出流。
void close()
关闭此套接字。
步骤:
1、创建客户端对象Socket,用构造方法绑定服务器的端口号和地址
2、使用Socket 方法中的getOutputStream 获取网络字节输出流OutputStream对象
3、使用网络字节输出流OutputStream对象中的write写给服务器内容
4、使用Socket 方法中的getInputStream 获取网络字节输出流InputStream对象
5、获取网络字节输出流InputStream对象的中的read方法读取服务器发送回来的数据
6、释放资源(Socket)
注意事项:
1、客户端和服务器交互必须使用Socket提供的网络流 不能使用自己创建的流对象
2、当我们创建客户端对象Socket的时候,就会去请求服务器经过三次握手,如果服务器没有启用
就会抛出异常java.net.ConnectException: Connection refused: connect
如果已经启用了,就可以进行交互。
public class TCPClient {
public static void main(String[] args) throws IOException{
//1、创建客户端对象Socket,用构造方法绑定服务器的端口号和地址
Socket socket = new Socket("127.0.0.1",5055);
//2、使用Socket 方法中的getOutputStream 获取网络字节输出流OutputStream对象
OutputStream outputStream = socket.getOutputStream();
//3、使用网络字节输出流OutputStream对象中的write写给服务器内容
outputStream.write("你好服务器".getBytes());
//4、使用Socket 方法中的getInputStream 获取网络字节输出流InputStream对象
InputStream inputStream = socket.getInputStream();
//5、获取网络字节输出流InputStream对象的中的read方法读取服务器发送回来的数据
byte[] bytes = new byte[1024];
int len = inputStream.read(bytes);
System.out.println(new String(bytes,0,len));
//6、释放资源(Socket)
socket.close();
}
}