JAVA学习之TCP服务端客户端互通

TCP是面向连接的通信协议,通信分为两端:服务端和客户端。不同于UDP通信使用DatagramSocket的send和receive方法进行数据的发送和接收,TCP是通过两端建立连接之后的Socket IO流进行通讯的,通过下面具体的代码可以清楚的理解TCP通讯过程。

/* * TCP客户端: * 1、建立TCP客户端服务 * 1)public class Socket 此类实现客户端套接字(也可以就叫“套接字”)。套接字是两台机器间通信的端点。 * 2)Socket(InetAddress address, int port) 创建一个流套接字并将其连接到指定 IP 地址的指定端口号。也就是明确目的端的ip和端口 * 2、建立连接后,进行数据传输,该部分数据的传输是通过IO流(Socket IO流)实现的 * 3、获取Socket对象的IO流对象 */
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 {     
        System.out.println("客户端启动");
        //创建客户端对象,明确目的地址和端口
        Socket s = new Socket("10.104.4.196",3997);
        //获取socket对象的IO流对象,将数据发送到服务端
        OutputStream os = s.getOutputStream();//getOutputStream() 返回此套接字的输出流。
        //通过输出流写数据
        os.write("helloWorld".getBytes());
        //获取socket的输入流对象
        InputStream is = s.getInputStream();//getInputStream() 返回此套接字的输入流。
        //通过输入流对象读服务端反馈的数据
        byte[] buf = new byte[1024];
        int len = is.read(buf);
        String data = new String(buf,0,len);
        System.out.println(data);       
        s.close();
    }
}

        /* * 创建服务器端: * 1、创建SeverSocket对象,需要监听端口 * 2、获取客户端socket对象,通过客户端的socket IO流和客户端进行通信 * 3、获取客户端的socket的读取流 * 4、读取数据并显示 */
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class TcpSever {
    public static void main(String[] args) throws IOException {
        System.out.println("服务端启动");
        //创建服务器端对象
        ServerSocket ss=new ServerSocket(3997);
        //获取客户端对象
        Socket s = ss.accept();//accept() 侦听并接受到此套接字的连接。
        //通过客户端对象获取socket的读取流
        InputStream is = s.getInputStream();
        byte[] buf = new byte[1024]; 
        int len = is.read(buf);
        String data = new String(buf,0,len);
        String ip = s.getInetAddress().getHostAddress();
        System.out.println("from--"+ip+":"+data);
        //向客户端反馈数据
        OutputStream os = s.getOutputStream();
        os.write("收到消息".getBytes());

        s.close();
        ss.close();}
}

运行结果如下:
服务端启动
from–10.104.4.196:helloWorld

客户端启动
收到消息

你可能感兴趣的:(java,socket,通信,tcp)