TCP网络程序的工作原理
TCP客户端程序与TCP服务器端程序的交互过程:
1)服务器程序创建一个ServerSocket,然后调用accept方法等待客户来连接。
2)客户端程序创建一个Socket并请求与服务器建立连接
3)服务器接收客户的连接请求,并创建一个新的Socket与该客户建立专线连接
4)建立了连接的两个Socket在一个单独的线程上对话
5)服务器开始等待新的连接请求,当新的连接请求到达时,重复步骤(2)到步骤(5)的过程
ServerSocket构造函数:
- public serverSocket()
- public serverSocket(int port)
- public serverSocket(int port,int backlog)
- public serverSocket(int port,int backlog,InetAddress bindAddr)
close方法
accept方法
Socket构造函数:
- public Socket()
- public Socket(String host,int port)
- public Socket(InetAddress,add,int port)
- public Socket(String host,int port,InetAddress local,int localPort)
- public Socket(InetAddress address,int port,InetAddress localAddr,int localPort)
举例: 从网络输入流中一次读取一行文件
package Chat;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class TcpServer {
public static void main(String[] args) throws IOException {
//创建ServerSocket对象
ServerSocket ss = new ServerSocket(9999);
//返回Socket 对象
Socket s = ss.accept();
//返回 InputStream 对象
InputStream ips = s.getInputStream();
//返回 OnputStream 对象
OutputStream ops = s.getOutputStream();
//写入输出流
ops.write("欢迎!!!".getBytes());
//创建字节流数组
//byte [] buf = new byte[1024];
//输入流读
//int len = ips.read(buf);
// System.out.println(new String(buf,0,len));
BufferedReader br = new BufferedReader(new InputStreamReader(ips));
br.readLine();
br.close();
//关闭流
//ips.close();
ops.close();
//关闭对象
s.close();
ss.close();
}
}
TCP服务器程序模型的编写要点:
TCP服务器程序要想能接收多个客户端连接,需要循环调用ServerSocket.accept方法
服务器程序与每个客户端连接的会话过程不能互相影响,需要在独立的线程中运行
一个线程服务对象与一个服务器端Socket对象相关联,共同来完成与一个客户端的会话