Ⅰ java socket 阻塞和非阻塞 会对数据传输有什么影响
阻塞会导致你的程序停在这里不往下走 非阻塞时,你的程序可以一边干其他事情(比如显示个进度条),以便等数据过来。
Ⅱ java编程中,Socket通信是怎么实现的
java编程对于Socket之间的通信过程如下:
服务端往Socket的输出流里面写东西,客户端就可以通过Socket的输入流读取对应的内容。Socket与Socket之间是双向连通的,所以客户端也可以往对应的Socket输出流里面写东西,然后服务端对应的Socket的输入流就可以读出对应的内容。下面来看一些服务端与客户端通信的例子:
publicclassServer{
publicstaticvoidmain(Stringargs[])throwsIOException{
//为了简单起见,所有的异常信息都往外抛
intport=8899;
//定义一个ServerSocket监听在端口8899上
ServerSocketserver=newServerSocket(port);
//server尝试接收其他Socket的连接请求,server的accept方法是阻塞式的
Socketsocket=server.accept();
//跟客户端建立好连接之后,我们就可以获取socket的InputStream,并从中读取客户端发过来的信息了。
Readerreader=newInputStreamReader(socket.getInputStream());
charchars[]=newchar[64];
intlen;
StringBuildersb=newStringBuilder();
while((len=reader.read(chars))!=-1){
sb.append(newString(chars,0,len));
}
System.out.println("fromclient:"+sb);
reader.close();
socket.close();
server.close();
}
}
客户端代码
Java代码publicclassClient{
publicstaticvoidmain(Stringargs[])throwsException{
//为了简单起见,所有的异常都直接往外抛
Stringhost="127.0.0.1";//要连接的服务端IP地址
intport=8899;//要连接的服务端对应的监听端口
//与服务端建立连接
Socketclient=newSocket(host,port);
//建立连接后就可以往服务端写数据了
Writerwriter=newOutputStreamWriter(client.getOutputStream());
writer.write("HelloServer.");
writer.flush();//写完后要记得flush
writer.close();
client.close();
}
}
Ⅲ java SOCKET编程 ,如何跳出accept() 阻塞
首先你这个逻辑就有问题
你如果想先将数据发给客户端,那么必须要让客户端先连接到服务端,你才能进行发送对吧
那么你就可以把这个总是细分,第一步,客户端连接到用器,这时候你的服务器才能向客户端发送数据库,第二步客户端处理完服务端的数据,再次向服务端发送数据
另外,你服务端应该用多线程进行交互
即一发现有客户端连接
就立马启动一条线程来处理请求
Ⅳ java socket 服务端接收数据阻塞。
服务器端处理的太慢了吧?
Ⅳ JAVA socket传送文件一直被阻塞
是不能等于-1撒..
他在等你那边给他写东西呢..
你应该在服务器端结束的时候给他写个东西过去..让他知道已经结束了..
还有什么问题HI我哈
但是read方法本身不就有告知客户端文件传送结束的功能么 当读到文件结束符的时候它会返回-1的啊
确实读文件结束就是-1...
但是你的客户端读的不是文件啊..服务器才是读文件..所以服务器能正常结束..
你的客户端读的服务器发来的东西..服务器读文件结束后就不给客户端发信息了..
而客户端的read()方法是阻塞式方法..意思就是服务器不传给他数据他就会一直等..
所以还是那样..在服务器端结束的时候给客户端发个消息说明已经结束了..客户端读到这个结束标志的时候也就不要再往文件里面写东西了..也结束..这样你的程序就正确了..
Ⅵ JAVA socket聊天室程序 readLine()阻塞
对每一个客户端都建立一个线程来接收消息,发消息与接消息不要在同一线程上,那就才能解决阻塞问题。一般新手用socket编程,大都是遇到阻塞问题不懂解决,导致了收发消息失败。其实网上socket聊天通讯的例子大把,遇到问题查查看,思考下就能明白了。
有问题欢迎提问,满意请采纳,thx.