TCP

由 Toniko 创建, 最后一次修改 2019-07-08

TCP实现服务端和客户端简单的通讯: 服务端接收到客户端的连接后向客户端发送字符串,客户端接收字符串并打印。

1.http是应用层协议,其底层传输协议是tcp协议,因此tcp服务端可以通过浏览器访问。但如果使用浏览器访问服务器http://localhost:8888时,会发生错误,这是因为http包装了TCP协议。
2.与UDP不同的是客户端使用的端口系统自动分配。
3.Socket是服务端和客户端建立的管道,可以将管道看成中介者,服务端和客户端都是和中介者打交道,不直接和对方打交道,这样实现了访问方式的统一。

1.服务端:

import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 1.创建服务器  指定端口new ServerSocket(int port)
 * 2.接受客户端连接  阻塞式
 * 3.发送数据
 */
public class MyServer {
    public static void main(String[] args) throws IOException {
        //1.创建服务器  指定端口new ServerSocket(int port)
        ServerSocket server = new ServerSocket(8888);
        //2.接受客户端连接  阻塞式
        Socket socket = server.accept();
        System.out.println("一个客户建立连接。");
        //3.发送数据
        /*BufferedWriter bWriter = new BufferedWriter(
                new OutputStreamWriter(socket.getOutputStream()));
        bWriter.write("hello你好!");
        bWriter.newLine();
        bWriter.flush();*/
        //另一种方式发送数据:
        DataOutputStream dStream = new DataOutputStream(socket.getOutputStream());
        dStream.writeUTF("hello你好!");
        dStream.flush();
        //4.关闭
//      bWriter.close();
        dStream.close();
        socket.close();
        server.close();
    }
}

2.客户端:

import java.io.DataInputStream;
import java.io.IOException;
import java.net.Socket;
/**
 * 1.创建客户端  必须指定服务器+端口  此时就会连接
 * 2.读取数据
 */
public class MyClient {
    public static void main(String[] args) throws IOException {
        //1.创建客户端  必须指定服务器+端口  此时就会连接
        Socket client = new Socket("localhost", 8888);
        //2.读取数据
        /*BufferedReader bReader = new BufferedReader(
                new InputStreamReader(client.getInputStream()));
        //注意:bReader.readLine()需要行的结束符,如:"\r\n",
        //也可以通过bWriter.newLine();创建行的结束符。
        System.out.println(bReader.readLine());*/
        //另一种读取数据方式:
        DataInputStream dStream = new DataInputStream(client.getInputStream());
        System.out.println(dStream.readUTF());
        //3.关闭
//      bReader.close();
        dStream.close();
        client.close();
    }
}
以上内容是否对您有帮助:

二维码
建议反馈
二维码