TCP 通信

一、TCP与UDP的区别

二、ServerSocket与Socket

1 ServerSocket

 

以上介绍的几个构造方法中,第二个构造方法最常用。

2.Socket

 

import java.io.*;
import java.net.*;
public class Server {
    public static void main(String[] args) throws Exception {
        new TCPServer().listen();     // 创建TCPServer对象,并调用listen()方法
    }
}
// TCP服务端
class TCPServer {
    private static final int PORT = 7789;   // 定义一个端口号
    public void listen() throws Exception { // 定义一个listen()方法,抛出一个异常
        ServerSocket serverSocket = new ServerSocket(PORT); // 创建ServerSocket对象,服务器启动,监听7789端口
        Socket client = serverSocket.accept();//等待客户端连接7788端口,一旦有client端连接便创建socket实例,然后通过socket交互数据
        System.out.println("开始与客户端交互数据");
        InputStream is = client.getInputStream();//用于接收客户端发来的请求 
        byte[] buf = new byte[1024];
        int len = is.read(buf);//从输入流读取若干字节,把它们保存到字节数组buf中,返回字节数
        String messageGet = new String(buf,0,len);
        System.out.println("服务端从客户端获取到的信息:"+messageGet);
        OutputStream os = client.getOutputStream();// 用于发送信息
        os.write(("我是服务端,我已经收到客户端你的消息!").getBytes());   // 当客户端连接到服务端时,向客户端输出数据
        Thread.sleep(5000); // 模拟执行其它功能占用的时间
        System.out.println("结束与客户端交互数据");
        os.close();
        client.close();
    }
}
import java.io.*;
import java.net.*;
public class Client {
    public static void main(String[] args) throws Exception {
        new TCPClient().connect();              // 创建TCPClient对象,并调用connect()方法
    }
}
//TCP客户端
class TCPClient {
    private static final int PORT = 7789;              // 服务端的端口号
    public void connect() throws Exception {
        //创建一个Socket并连接到给出地址和端口号的计算机
        Socket client = new Socket(InetAddress.getLocalHost(), PORT);
        OutputStream os = client.getOutputStream();
        String message = "我是客户端,收到请回答!";
        os.write(message.getBytes());
        InputStream is = client.getInputStream();     // 得到接收数据的流
        byte[] buf = new byte[1024];                  // 定义1024个字节数组的缓冲区
        int len = is.read(buf);                        // 将数据读到缓冲区中
        System.out.println(new String(buf, 0, len));  // 将缓冲区中的数据输出
        client.close();                                     // 关闭Socket对象,释放资源
    }
}

 

posted @ 2018-03-06 19:29  Rainyn  阅读(185)  评论(0编辑  收藏  举报