欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java——TCP通信客户端、服务端实现

程序员文章站 2022-06-05 21:02:28
...

在TCP通信中,客户端以及服务端都是以字节流的形式进行交互的,所以会用到字节输入流InputStream、字节输出流OutputStream中的方法

客户端
/*
TCP通信的客户端:向服务器发送数据,读取服务器回写的数据
表示客户端的类:
java.net.Socket:实现客户端套接字,套接字是两台机器间通信的端点
套接字:包含了IP地址和端口号的网络单位
构造方法
Socket(String host, int port) 创建一个流套接字并将其连接到指定主机上的指定端口号。
参数:
String host:服务器主机的名称/服务器的IP地址
int port:服务器的端口号
成员方法
getOutputStream() 返回此套接字的输出流。
getInputStream() 返回此套接字的输入流。
close() 关闭此套接字。
实现步骤
1.创建一个客户端对象Socket,构造方法绑定服务器的IP地址和端口号
2.使用Socket对象中的方法getOutputStream()获取网络字节输出流OutputStream对象
3.使用网络字节输出流OutputStream对象中的方法write,给服务器发送数据
4.使用Socket对象中的方法getInputStream()获取网络字节输入流InputStream对象
5.使用网络字节输入流InputStream对象中的方法read,读取服务器回写的数据
6.释放资源

  • */
package com.itheima.demo01.TCP;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.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 os = socket.getOutputStream();
        // 3.使用网络字节输出流OutputStream对象中的方法write,给服务器发送数据
        os.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.close();
    }
}

服务器端
/*
TCP通信的服务器端,接收客户端的请求,读取客户端发送的数据,给客户端回写数据
表示服务器的类:
java.net.ServerSocket 此类实现服务器套接字。服务器套接字等待请求通过网络传入。它基于该请求执行某些操作,然后可能向请求者返回结果。
构造方法
ServerSocket(int port) 创建绑定到特定端口的服务器套接字。
成员方法
accept() 侦听并接受到此套接字的连接。
实现步骤
1.创建服务器对象ServerSocket和系统要指定的端口号
2.使用ServerSocket对象中的方法 accept()获取到请求的客户端对象Socket
3.使用Socket对象中的方法getInputStream()获取网络字节输入流InputStream对象
4.使用网络字节输入流InputStream对象中的方法read,读取客户端发送的数据
5.使用Socket对象中的方法getOutputStream()获取网络字节输出流OutputStream对象
6.使用网络字节输出流OutputStream对象中的方法write,给客户端回写数据
7.释放资源

*/

package com.itheima.demo01.TCP;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
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();
        // 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.close();
        server.close();
    }
}