你的winsock写的有问题,因为socket数据都有缓存,数据量小必须手动flush
解决方案 »
- 我在jsp调用java类里面的方法为什么不行啊
- 报异常,是什么异常?如何解决?
- SHH 整合出现的错误,相信大家都见过,帮我解决行吗?
- 【【高分】】求jforum单点登陆的实例代码!!!【【分不够再加】】
- struts-config.xml 配置文件 对不对? 怎么总是报错啊?
- jfreechart 堆栈图设置颜色
- 请问在jboss中连接池的JNDI?
- j2ee启动出错
- 一个简单CMP例子,实现了1:1,1:n,m:n关联,使用xdoclet生成相关文件,在JBoss-3.0.4下运行正常。
- (半成品)java 通过JtextPane实现qq气泡聊天。怎么在Jtextpane实现不同的段落,使用不同的对齐方式
- 关于rmi 启动服务器 异常--java.net.ConnectException: Connection refused: connect
- javabeen+JSP使用tomcat5 ,需要设置嘛?为什么我只要在jsp中用been就出问题!
如果是winsock的缓存的原因,那是不是写一个winsock对winsock的程序也要flush呢?楼主:
可否描述清楚一点,关闭之后服务器的sock得到的是什么?是不是-1?如果是的话,这只是听到客户端关闭了而已。要么看看你的核心代码。
public ServerThread(Socket s) { // serverThread构造方法
this.clientRequest = s; // 接收receiveServer传来的套接字
InputStreamReader reader; // 声明读数据类型
OutputStreamWriter writer; // 声明写数据类型
try { // 初始化输入、输出流 reader = new InputStreamReader(clientRequest.getInputStream());
writer = new OutputStreamWriter(clientRequest.getOutputStream());
input = new BufferedReader(reader);
output = new PrintWriter(writer, true); }
catch (Exception e) {
System.out.println(e.getMessage());
}
} public void run() { // 线程执行方法
String command = null; // 客户指令(客户端传送的数据)
String str = null;
boolean done = false; while (!done) { try { str = input.readLine(); // 接收客户端指令
System.out.println("接收到:"+str);
}
catch (IOException e) {
System.out.println(e.getMessage());
}
command = str.trim().toUpperCase();
if (str == null || command.equals("QUIT")){
output.println("结束操作!");
done = true; // 命令QUIT结束本次连接
}
else // 命令HELP查询本服务器可接受的命令
if (command.equals("HELP")) {
output.println("帮助操作!");
output.println("query");
output.println("quit");
output.println("help");
}
else
if (!command.startsWith("HELP") &&
!command.startsWith("QUIT") &&
!command.startsWith("QUERY")) {
output.println("Command not Found! Please refer to the HELP!");
}
} // end of while
try {
clientRequest.close(); // 关闭套接字
}
catch (IOException e) {
System.out.println(e.getMessage());
}
command = null;
} // end of run}
JAVA读数据完毕后进行flush操作,有没有代码参考一下,我没发现java的输入流读取对象有flush()这个函数,我用的是BufferedReader.
//创建流式Socket
sClient=Create SocketStream ulAddr=ws.inet_addr("192.168.1.97")
//服务器地址
r=sClient.wsconnect(ulAddr,8080)
If r=-1 Then//连接到服务器的8080号端口
MessageBox("Socket","连接服务器失败"+String(r))
End If buf=Blob(Space(256))//定义缓冲区大小//将mle_1中的内容放入发送缓冲区buf=Blob(sle_1.Text)
//将buf中的内容发给对方
sClient.send(buf,Len(buf),0) //到这里加入下面关闭连接代码服务器端才可以收到要发送的数据
//sClient.closesocket();