看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)
关键代码如下:
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)
声明在外面,实现在里面啊,只是为了方便关闭,你这个循环一次,socket给关一次?。。
如果你是读字符串的话用BufferedReader 直接读字符串好了。
BufferedReader _in = new BufferedReader(new InputStreamReader(this._socket.getInputStream()));
String str = this._in.readLine();
如果你是读字符串的话用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(); }}
楼主可以采用先把接收到的byte[]转化成String类,再拼接字符串之后转回Byte[]数组就可以了