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对象,释放资源 } }