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)
楼主的设计太复杂了。
buffer中预先放置一些数据 那还是buffer嘛~~
那像这种需求在实际应用中通常是怎么解决的?
如果你是读字符串的话用BufferedReader 直接读字符串好了。
BufferedReader _in = new BufferedReader(new InputStreamReader(this._socket.getInputStream()));
String str = this._in.readLine();
import java.io.*;
import java.net.*;
public class Server {
private ServerSocket _ServerSocket;
private Socket _socket;
private BufferedReader _in;
private PrintWriter _out;
public Server(){
try{
this._ServerSocket = new ServerSocket(10000);
while(true){
this._socket = this._ServerSocket.accept();
this._in = new BufferedReader(new InputStreamReader(this._socket.getInputStream()));
this._out = new PrintWriter(this._socket.getOutputStream());
while(true){
try{
String str = this._in.readLine();
System.out.println("client cmd=" + str);
this._out.println("your input is:" + str);
this._out.flush();
if("exit".equals(str)){
break;
}
}catch(IOException e){
System.out.println("the client's connection is lose");
break;
}
}
this._out.close();
this._in.close();
this._socket.close();
}
}catch(IOException e){
e.printStackTrace();
}
}
public static void main(String[] args){
new Server();
}
}