我有一台服务器和一台客户端。服务器能够处理多个请求。客户端打开套接字并发送字节流。在服务器正在处理时,它的行为不正确。从客户端我发送以下行
将此添加为您的客户
标题:Client1
为5个不同的客户
我正在使用字符串构建器来构建如上所述的格式化字符串。
for (i=0; i<6; i++)
{
Socket socket = new Socket(host, port);
StringBuilder sb = new StringBuilder();
sb.append("ADD this as your client ");
sb.append("\r\n");
sb.append("Title: Client");
sb.append(i);
sb.append("\r\n");
String ToSend = sb.toString();
/// New Additions
byte[] byteArray = ToSend.getBytes();
OutputStream os = socket.getOutputStream();
DataOutputStream dos = new DataOutputStream(os);
dos.writeInt(byteArray.length);
dos.write(byteArray,0,byteArray.length);
socket.close();
}
在服务器中我正在读这个。
public static void main(String[] args) {
Sampleserver file_rec = new Sampleserver();
try {
ServerSocket listener = new ServerSocket(port);
while (true) {
file_rec.socket = listener.accept();
new Thread(file_rec).start();
}
}
catch (java.lang.Exception ex) {
ex.printStackTrace(System.out);
}
}
public void run() {
try {
InputStream is = socket.getInputStream();
DataInputStream dis = new DataInputStream(is);
int length = dis.readInt();
System.out.println("Length value is " + length);
byte[] mybytearray = new byte[length];
int bytesRead = is.read(mybytearray, 0, length);
String s = new String(mybytearray, 0, length);
System.out.println(s);
if (s.contains("ADD"))
{
System.out.println("Inside ADD. ");
}
else
{
System.out.println("Default ");
}
}
catch (java.lang.Exception ex) {
ex.printStackTrace(System.out);
}
}
但是每次在服务器中我都会得到奇怪的输出。我认为我没有正确处理bytearray或者在线程环境中处理它时在服务器中错误地处理它(在run方法中)。你能告诉我我哪里出错了。