工具:IDEA2020

jdk 1.8

本文实现基于Socket类、ServerSocker类的TCP网络通信编程。

0.Socker类与ServerSocker类

(1)客户端

Socket类构造方法如下:

Socket(String host,int port) 创建流套接字并将其连接到指定主机上的指定接口

Socket(InetAddress address,int port) 创建流套字并将其连接到指定IP地址的指定端口

Socket类常用方法如下:

getInetAddress() 返回与此Socket对象关联的InetAddress
getInputStream() 返回与此Socket对象关联的InputStream
getOutStream() 返回与此Socket对象关联的OutputStream

(2)服务端

ServerSocket类构造方法如下:

ServerSocket()  无参构造方法,创建未绑定的服务器套接字
ServerSocket(int port) 有参构造方法,创建绑定到指定端口的服务器套接字

ServerSocket类常用方法如下:

accept()  监听要连接到此服务器套接字的客户端的Socket并接受它
getInetAddress() 返回此服务器套接字的本地地址
getLocalPort()  返回此服务器套接字正在监听的端口
setSoTimeout(int timeout) 设置带有指定超时时间。对accept()的调用将启用超时时间
一、创建TCP服务端

打开IDEA,点击File—>New—>Project

下面这里选择Java,然后右侧选择SDK版本,这里选择1.8版本

下一步输入Project name,这里 项目名称为 tcpServer,右下角选择“Finish”

创建的类名为TcpServer

参考代码如下:

import com.sun.corba.se.spi.orbutil.fsm.Input;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

public class TcpServer {
    public static void main(String[] args) throws IOException {
        int port = 8888; // 服务端监听的端口号
        //创建服务端ServerSocket的对象并绑定指定端口
        ServerSocket serverSocket =new ServerSocket(port);
        //调用accept()方法,进行监听,接受客户端的连接请求
        Socket clientSocket = serverSocket.accept();
        System.out.println("客户端已连接: " + clientSocket.getInetAddress());
        InputStream is = clientSocket.getInputStream();
        InputStreamReader isr = new InputStreamReader(is);
        BufferedReader bufferedReader = new BufferedReader(isr);
        //循环读取数据
        String str =bufferedReader.readLine();
        //输出
        System.out.println(str);
        //关闭流和socket
        bufferedReader.close();
        clientSocket.close();
    }
}

用网络调试工具,模拟客户端向服务端发送信息,效果如下:

服务端源代码:tcpServer.zip(访问密码: 8543): https://url47.ctfile.com/f/64055047-1506279991-25f874?p=8543

二、创建TCP客户端

重新创建一个新项目,名字为tcpClient,创建的实体类TcpClient

参考代码如下:

import java.io.*;
import java.net.Socket;

public class TcpClient {
    public static void main(String[] args) throws IOException {
        //创建客户端Socket对象,指定服务端IP地址和端口,并请求服务端连接
        String ip ="127.0.0.1";
        int port=8888;
        Socket socket = new Socket(ip,port);
        OutputStream os = socket.getOutputStream();
        OutputStreamWriter osw = new OutputStreamWriter(os);
        BufferedWriter bufferedWriter = new BufferedWriter(osw);

        //要传输的数据;
        String str="hello";
        //向输出流中写入字符串
        bufferedWriter.write(str);
        //关闭流和socket
        bufferedWriter.close();
        socket.close();
    }
}

先启动服务端,再启动客户端,效果如下:

客户端源代码下载:tcpClient.zip(访问密码: 4251): https://url47.ctfile.com/f/64055047-1506280960-6bcb98?p=4251