表示而客户端的类Socket 表示服务器的类ServerSocket
1.在java中,提供了两个类用于TCP通信:
客户端:java.net.Socket类表示,创建Socket对象,向服务器发送连接请求
服务器端:Java.net.ServerSocket类表示创建ServerSocket对象,相当于开启一个服务,并等待客户端的连接
TCP通信的客户端:向服务器发送连接请求,给服务器发送数据,读取服务器回写的数据 表示客户端的类: java.net.Socket:此类实现客户端套接字(套接字是两台机器间通信的端点) 套接字:包含了ip地址和端口号的网络单位 构造方法: Socket(String host, int port) 创建一个流套接字并将其连接到指定主机上的指定端口 参数: host:服务器主机的名称/服务器的ip地址 int port:服务器的端口号 成员方法:(客户端与服务器进行交互使用字节流) getOutputStream() 返回此套接字的输出流。 getInputStream() 返回此套接字的输入流。 void close() 关闭此套接字。 步骤: 1.创建一个客户端对象Socket,构造方法中绑定服务器的ip地址和端口号 2.使用Socket对象中的方法getOutputStream();获取网络字节输出流OutputStream对象(输出写入) 3.使用网络字节输出流OutputStream对象中的方法write,给服务器发送数据 4.使用Socket中的方法getInputStream()获取网络字节输入流InputStream对象 5.使用网络字节输入流InputStream对象中的方法read读取服务器回写的数据 6.释放资源(Socket) 注意: 1.客户端和服务器进行交互,必须使用Socket中提供的网络流,不能使用自己创建的对象 2.当我们创建客户端对象的时候就回去请求服务器和服务器经过三次握手建立连接通路,如果这时服务器没有启动就会抛出异常如果服务器已经启动呢么就可以进行交互了
public class TCPclient {
public static void main(String[] args) throws IOException {
//1.创建一个客户端对象Socket,构造方法中绑定服务器的ip地址和端口号
Socket socket = new Socket("127.0.0.1",8888); //本机的ip地址
//2.使用Socket对象中的方法getOutputStream();获取网络字节输出流OutputStream对象(输出写入)
OutputStream outputStream =socket.getOutputStream();
//3.使用网络字节输出流OutputStream对象中的方法write,给服务器发送数据
outputStream.write("你好服务器".getBytes());
//4.使用Socket中的方法getInputStream()获取网络字节输入流InputStream对象
InputStream is = socket.getInputStream();
//5.使用网络字节输入流InputStream对象中的方法read读取服务器回写的数据
byte[] bytes = new byte[1024];
int len = is.read(bytes);
System.out.println(new String(bytes,0,len));
//6.释放资源(Socket)
socket.close(); //注意这里s小写是对象名点来调用
}
}
TCP通信的服务器端代码实现
TCP通信的服务器端:接收客户端的请求,读取客户端发送的数据,给客户端回写数据 表示服务器的类 java.net.ServerSocket:此类实现服务i的套接字 构造方法: 构造方法摘要 ServerSocket(int port) 创建绑定到特定端口的服务器套接字。 服务器必须搞明白一件事情必须知道是呢个客户端请求的服务器 所以可以使用accept方法获取到请求的客户端对象Socket 成员方法: Socket accept() 侦听并接受到此套接字的连接。 服务器的实现步骤: 1.创建服务器ServerSocket对象和系统要指定的端口号 2.使用ServerSocket对象中的方法accept获取到请求的客户端对象Socket 3.使用Socket中的方法getInputStream()获取网络字节输入流InputStream对象 4.使用网络字节输入流InputStream对象中的方法read读取客户端发送的数据 5.使用Socket对象中的方法getOutputStream();获取网络字节输出流OutputStream对象 6.使用网络字节输出流OutputStream对象中的方法write,给客户端发送数据 7.释放资源(Socket ServeSocket)
public class TCPServer {
public static void main(String[] args) throws IOException {
//1.创建服务器ServerSocket对象和系统要指定的端口号
ServerSocket server = new ServerSocket(8888);//不要加引号
//2.使用ServerSocket对象中的方法accept获取到请求的客户端对象Socket
Socket socket = server.accept(); //表示而客户端的类Socket 表示服务器的类ServerSocket这里用accept方法找到客户端对象
// 3.使用Socket中的方法getInputStream()获取网络字节输入流InputStream对象
InputStream is =socket.getInputStream();
// 4.使用网络字节输入流InputStream对象中的方法read读取客户端发送的数据
byte[] bytes = new byte[1024];
int len = is.read(bytes);
System.out.println(new String(bytes,0,len));
// 5.使用Socket对象中的方法getOutputStream();获取网络字节输出流OutputStream对象
OutputStream os = socket.getOutputStream();
// 6.使用网络字节输出流OutputStream对象中的方法write,给客户端发送数据
os.write("收到谢谢".getBytes());
// 7.释放资源(Socket ServeSocket)
socket.close();
server.close();
}
}