socket问题

keath90 2013-04-01 09:11:49
今天写了一个socket的服务器端的程序,但是在接受数据时出现问题,我用sockettool(socket调试工具)发东西过来的时候,只有断开sockettool的时候,服务器这边才能接受到数据,请问这是怎么回事儿,下面是写的代码
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 ss=new ServerSocket(12345);

System.out.println("正在监听12345端口");

Socket s=ss.accept();

//读取数据
InputStreamReader isr=new InputStreamReader(s.getInputStream());
BufferedReader br=new BufferedReader(isr);


//读取从客户端发来的信息
String info=br.readLine();

System.out.println(info);


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

}
...全文
146 7 打赏 收藏 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
冰思雨 2013-04-03
  • 打赏
  • 举报
回复
发送端代码的问题。 楼主发送数据,没有自定义传输协议,每次传输的信息,基本上是以回车换行符最为区分的。 所以,客户端不输入回车换行符,就表明本次传输的数据,没有完成,服务端的读取方法持久阻塞。 其次就是,客户端写入数据后(包括回车换行符),没有调用flush方法,将发送缓存区的数据推到网络上,造成服务端因为没有收到数据而持续阻塞。
liuh2013 2013-04-03
  • 打赏
  • 举报
回复
LZ可以先看看TCP/IP协议方面的书。
FunnyRabbit87 2013-04-03
  • 打赏
  • 举报
回复
按照自己需求,写一部分数据后 flush一下。 或者全部写完后调用flush。 flush是关键所在
清蒸豆豆 2013-04-02
  • 打赏
  • 举报
回复
你可以试试其他抓包工具wireshark测试一下,tcpdump,也可以嘛,看看还会出现问题吗。 可以不用readLine(),重新设置读取判断条件,和输出。。。
STEEL-CHINA 2013-04-02
  • 打赏
  • 举报
回复
嘿!socket通信,这东西,如果特别感兴趣,多研究一下。 如果做项目用,apache mina吧。 虽然我自己会习惯自己写,在项目中出错是少不了的。 如果你希望你的性能和稳定度更高,先用框架吧。
nmyangym 2013-04-02
  • 打赏
  • 举报
回复
"还发现个问题就是,在发送数据时,按一下回车,再点儿发送,服务器这边就能接受到了" 可能原因是, String info=br.readLine();这句是读入一行,而判断是否为一行就是碰到"\r\n",你在发送之前按"回车",正好给行末加了"\r\n".
keath90 2013-04-01
  • 打赏
  • 举报
回复
还发现个问题就是,在发送数据时,按一下回车,再点儿发送,服务器这边就能接受到了

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧