在java中处理多线程套接字连接

时间:2012-11-21 23:01:01

标签: java multithreading io thread-safety

我有一台服务器和一台客户端。服务器能够处理多个请求。客户端打开套接字并发送字节流。在服务器正在处理时,它的行为不正确。从客户端我发送以下行

将此添加为您的客户

标题: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方法中)。你能告诉我我哪里出错了。

0 个答案:

没有答案