日期:2014-05-20  浏览次数:20851 次

java socket 发送消息问题。。。
看java tcp/ip socket编程实战  书上有个例子是把客户端发送过来的消息原封不动的返回给客户端  现在我有个想法就是  在客户端发送过来的消息基础上加一些信息  比如客户端发过来"abc" 服务端就返回给客户端"server send abc"  书上的例子是用了一个byte[]作为buffer用来接收客户端发过来的消息  我的想法是在这个buffer中预先放置一些数据  然后把客户端发来的信息追加到 buffer中 发送过去  但是好像不行
关键代码如下:
byte[] receiveBuf = new byte[BUFSIZE];
byte[] serverInfo = "server send:".getBytes();
for(int i = 0;i < serverInfo.length;i ++){
receiveBuf[i] = serverInfo[i];
}
while(true){
Socket client = serverSocket.accept();
SocketAddress clientAddress = client.getRemoteSocketAddress();
System.out.println("client address:" + clientAddress);
InputStream in = client.getInputStream();
OutputStream out = client.getOutputStream();
while((recvMsgSize = in.read(receiveBuf,serverInfo.length,in.available())) != -1){
out.write(receiveBuf);
}
client.close();
}

错误提示:
Exception in thread "main" java.net.SocketException: Software caused connection abort: socket write error
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(Unknown Source)
at java.net.SocketOutputStream.write(Unknown Source)
at TcpEchoServer.main(TcpEchoServer.java:37)

------解决方案--------------------
"server send:"是服务端固定的字符,可以考虑先将服务端内容读取出来后,把"server send:"固定拼接到前面即可。

这个错误,应该是close方法的问题,建议做成多线程的。
------解决方案--------------------
引用:
Quote: 引用:

socket的定义和client.close();拿到while外面去

这样不对吧。。。只对一个客户端服务??

声明在外面,实现在里面啊,只是为了方便关闭,你这个循环一次,socket给关一次?。。
------解决方案--------------------
额!我想问一下,你这个这么长就是为了单单知吧 “a server send”写出去?这个是server端,原意是把client端的东西读进来然后再发出去直接在原来的代码上dos.writeUTF("a server send:”+str),ps:你加个处理流吧,数组看起来好大一坨
------解决方案--------------------