您的位置:程序门 -> java -> j2se / 基础类



如何通过socket实现双方通信


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


如何通过socket实现双方通信[已结贴,结贴人:youhaodeyi]
发表于:2007-02-23 10:48:42 楼主
我写了一个c/s程序,客户端连接到服务器上,然后双方实现通信,但是为什么当客户端发送数据到服务器端后,客户端在等待服务器端发来的信息的时候总是提示socket已经关闭,我的客户端代码是:

client   =   new   java.net.socket( "127.0.0.1 ",1234);
java.io.outputstream   output   =   client.getoutputstream();
java.io.inputstream   input   =   client.getinputstream();
java.io.bufferedwriter   writer   =  
                  new   java.io.bufferedwriter( new   java.io.outputstreamwriter(output));
writer.write( "eiieei ");
writer.flush();
writer.close();

java.io.bufferedreader   reader   =   new   java.io.bufferedreader(
new   java.io.inputstreamreader(input));

string   line   =   reader.readline();   //这句话提示socket已经关闭

我跟踪代码查一下了发现当执行writer.clase()后,socket就已经关闭了,但是如果不写这句话服务器端无法得到客户端发来的最后一个字符。
该如何解决?
谢谢
发表于:2007-02-23 13:37:521楼 得分:20
bufferedreader读数据的时候,似乎有的问题,采用下面的方式
import   java.io.*;  
import   java.net.*;  

public   class   myserver   {  
public   static   void   main(string[]   args)   throws   ioexception{  
serversocket   server=new   serversocket(5678);  
socket   client=server.accept();  
bufferedreader   in=new   bufferedreader(new   inputstreamreader(client.getinputstream()));  
printwriter   out=new   printwriter(client.getoutputstream());  
while(true){  
string   str=in.readline();  
system.out.println(str);  
out.println( "has   receive.... ");  
out.flush();  
if(str.equals( "end "))  
break;  
}  
client.close();  
}  
}  
发表于:2007-02-23 18:12:222楼 得分:0
那么读数据的时候应该怎么读呢?
发表于:2007-02-23 18:13:503楼 得分:0
哦,我明白了。但是能否解释一下为什么bufferedreader读数据的时候会有问题吗?
发表于:2007-02-24 11:14:594楼 得分:0
还是不行呀,bufferedreader读取的时候还是得要求写入端关闭writer才行
发表于:2007-03-19 09:54:515楼 得分:0
服务器端要一直等待客户端的信息
发表于:2007-03-21 08:38:536楼 得分:0
是呀,但是为什么发送数据时客户端必须关闭socket服务器端才能收得到呢?


快速检索

最新资讯
热门点击