网络编程需要客户端和服务端:
服务端的步奏如下:
1. 创建 ServerSocket
2. 绑定端口ServerSocket.bind(8899)
3. Socket socket=serversocket.accept()
注意: 这里accept方法会阻塞,等待客户端的连接,如果有客户端的连接,就返回一个socket的对象。这里面的代码有问题,如果步骤123都放在同一个线程中执行,那么就只能接受一个客户端的请求。等一个客户端的请求结束之后,才会处理这个客户端的请求。所以这里的代码不能这么写,针对步奏三。
我们常见的写法是这样的。
while(true){
Socket socket=serversocket.accept()
new thread(socket){
socket.getInputstream();
}
}
//这样的一个好处就是一个请求回来兴起了一个线程去处理,8899端口又可以接受新的连接。但这种方法很明显,它的线程数量是有限的。并不能无限创建线程。
上边三部可以简写为SBA(Server Socket, Bind, Accept傻逼A,便于记忆)
客户端:
那客户端怎么写
客户端的写法是
Socket =new Socket(localhost, 8899);
socket.connect()
客户端一般不使用多线程。,当然客户端如果需要连接多个主机也可以使用。这样客户端在向主机8899端口发起连接以后,主机的socket在自己空闲的端口中任选一个和客户端进行通信,这样一个socket链接就建立成功,后续的通信就可以正常进行,客户端和服务端分别采用getInputstream()。来获取客户端发送的数据流。