
java多线程socket通信原理是什么?
看到如下代码publicstaticvoidmain(String[]args)throwsIOException{ServerSocketserver=newServe...
看到如下代码
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(10000);
while (true) {
Socket socket = server.accept();
invoke(socket);
}
}
private static void invoke(final Socket socket) throws IOException {
new Thread(new Runnable() {
public void run() {
ObjectInputStream is = null;
ObjectOutputStream os = null;
当端口收到请求后,直接以这个监听对象开了一个新线程。求解释?
如果有多个客户同时与服务器通信,服务器程序只监听10000这一个端口,如何靠这个socket对象区分是哪个客户发来的会话?是因为每个socket都有自己的id吗?不懂 展开
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(10000);
while (true) {
Socket socket = server.accept();
invoke(socket);
}
}
private static void invoke(final Socket socket) throws IOException {
new Thread(new Runnable() {
public void run() {
ObjectInputStream is = null;
ObjectOutputStream os = null;
当端口收到请求后,直接以这个监听对象开了一个新线程。求解释?
如果有多个客户同时与服务器通信,服务器程序只监听10000这一个端口,如何靠这个socket对象区分是哪个客户发来的会话?是因为每个socket都有自己的id吗?不懂 展开
5个回答
展开全部
第一,程序是通过分时进行服务的。就是说一个程序监听一个端口,第一秒可以从别的地方来一个包,第二秒可以从另一个地方来一个包。
第二,每个socket都会有包发送来的ip地址和端口号,服务器向这个ip对应机器的端口发送数据以回应对方。
第二,每个socket都会有包发送来的ip地址和端口号,服务器向这个ip对应机器的端口发送数据以回应对方。
展开全部
简单点说, 每个socket都保有一些信息, 比如他所对应的客户端地址和端口等等, 来唯一确定他所负责的客户端, 所以任何到达10000端口的包都可以有去处: 如果已经有socket和他对应了, 那么交给socket处理, 如果没有, 那么放进请求队列, 等待.accept()方法去抽取他并生成一个socket来和他对应.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
当Server每接受到一个Client连接请求之后,都把处理流程放到一个独立的线程里去运行,然后等待下一个Client连接请求,这样就不会阻塞Server端接收请求了。每个独立运行的程序在使用完Socket对象之后要将其关闭。这样就实现了多线程socket通信。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
socket 需要 把自己的 ip 告诉ServerSocket,就是根据ip来区分的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
防止阻塞
如果不用线程,你在主线程中侦听端口,
那么你会发现,你如果不连接上的话,就会一直在等待,什么也做不了。
如果不用线程,你在主线程中侦听端口,
那么你会发现,你如果不连接上的话,就会一直在等待,什么也做不了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询