socket 客户端不能同时读写

keenmeng 2008-11-14 03:07:41

Client 端:

import java.io.*;
import java.net.*;
public class Client{
public static void main(String args[])throws Exception
{

Socket socket=new Socket("localhost",6735);

InputStream is=socket.getInputStream();
OutputStream os=socket.getOutputStream();
DataOutputStream dos=new DataOutputStream(os);
BufferedReader buf=new BufferedReader(new InputStreamReader(is));
String str;
dos.writeBytes("meng");
dos.flush();
str=buf.readLine();
System.out.print(str);

buf.close();
dos.close();
is.close();

}


server端:

import java.io.*;
import java.net.*;
import java.util.*;
public class Server {

public static void main(String args[]) throws IOException {
Server ms = new Server();
ServerSocket sSocket;
sSocket = new ServerSocket(6735);

while(true){
Socket socket = sSocket.accept();
InputStream stream = socket.getInputStream();
BufferedReader buf = new BufferedReader(new InputStreamReader(
stream));

OutputStream os = socket.getOutputStream();

DataOutputStream dos = new DataOutputStream(os);
String str;
str=buf.readLine();
str=str+"chun";

dos.writeBytes(str);
dos.flush();
dos.close();
buf.close();


}
}


在client只读,server写;或者client 写,server端读,程序能正确运行。
但是client 同时读和写,server同时从客户端读和向客户端写就会出错: connection reset.
请指教~谢谢
...全文
156 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
keenmeng 2008-11-16
  • 打赏
  • 举报
回复

PrintWriter pw=new PrintWriter(socket.getOutputStream);
DataOuputStream dos=new DataOutputStream(socket.getOutputstream);

dos.writebytes("meng") 换为pw.print("meng") 就行了。

但是printwriter类的print方法只是打印,不是向服务器写数据,怎么能替换writebytes的功能呢?
为什么writebytes又不行呢?

谢谢各位,我以及困惑几天了
keenmeng 2008-11-16
  • 打赏
  • 举报
回复

PrintWriter pw=new PrintWriter(socket.getOutputStream);
DataOuputStream dos=new DataOutputStream(socket.getOutputstream);

dos.writebytes("meng") 换为pw.print("meng") 就行了。

但是printwriter类的print方法只是打印,不是向服务器写数据,怎么能替换writebytes的功能呢?
为什么writebytes又不行呢?

谢谢各位,我以及困惑几天了
newslxw 2008-11-15
  • 打赏
  • 举报
回复

因为socket的缓存是以\n结束来清理缓存,发送数据.

dos.writeBytes("meng"); 改成
dos.writeBytes("meng\r\n");
str=str+"chun";
改成
str=str+"chun\r\n";

newslxw 2008-11-15
  • 打赏
  • 举报
回复
堵塞了,用多线程才行

67,538

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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