这是我参考网上写的socket的服务器,由于我不是学这个的,但是要用,这个是服务器端,在接收数据时出现问题,连接是正常的,但是必须要在客户端发送数据时按一下回车再发送,才能接收到数据,由于客户端是调试工具,不能改,只能在我这个服务器上改,望各位大神帮我改改
import java.io.*;
import java.net.*;
public class AcceptData { /**
 * @param args
 */
public static void main(String[] args) {
AcceptData ad=new AcceptData();
}
  
 public AcceptData()
 {
 try {
ServerSocket server=new ServerSocket(12345);
System.out.println("正在监听12345端口......");
//保持阻塞
Socket s=server.accept();

System.out.println("连接好了");

InputStreamReader isr=new InputStreamReader(s.getInputStream());
BufferedReader is=new BufferedReader(isr);
    
while(true)
{
String info=is.readLine();
System.out.println("接收到的数据:"+info);

}


} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
 }  
 
}

解决方案 »

  1.   

    但是必须要在客户端发送数据时按一下回车再发送,才能接收到数据
    String info=is.readLine();
    你不按回车,没有行结束标识,这个读一行就不会返回,不会返回数据就等待哟。
    你的socket是阻塞型的,s.setSoTimeOut()设置一个时间,就不会等待换行就返回了。
    其实socket还真必须懂一点才能玩。
      

  2.   

    ============================
    改了也没有什么太多的用,要怎么改?这只是你练习一下而以,你客户端怎么做也很重要。    s.setSoTimeout(1000);
        BufferedInputStream bis =new BufferedInputStream(s.getInputStream());
        byte[] data = new byte[1024];
        while(true){
    int len = bis.read(data);
            System.out.println("接收到的数据:"+ new String(Arrays.copyOf(data, len)));
        }