【发布时间】:2015-09-22 20:42:59
【问题描述】:
如何从具有两个不同线程的单个套接字下载具有两个不同对象 BufferedReader 和两个不同对象 Scanner 的字符串? 我已经在下面尝试过这个解决方案,但是 myReader1 在从 Socket 读取后,出现了无效字符,我该如何解决?您可能会建议一种解决方法?提前非常感谢
//Socket TCP declaration
InetAddress serverAddr = InetAddress.getByName(IP);
try
{
Socket mySocket = new Socket(serverAddr, PORT);
}
catch(Exception e)
{
e.printStackTrace();
}
//Thread 1
Thread t1 = new Thread(new Runnable()
{
@Override
public void run()
{
BufferedReader myReader1 = new BufferedReader(new InputStreamReader(mySocket.getInputStream(), "UTF-8"));
Scanner myScanner1 = new Scanner(myReader1).useDelimiter("\0");
synchronized(mySocket)
{
while(mySocket.isConnected() && myScanner1.hasNext())
{
String s = myScanner1.next();
}
}
}
});
Thread t2 = new Thread(new Runnable()
{
@Override
public void run()
{
BufferedReader myReader2 = new BufferedReader(new InputStreamReader(mySocket.getInputStream(), "UTF-8"));
Scanner myScanner2 = new Scanner(myReader2).useDelimiter("\0");
synchronized(mySocket)
{
while(mySocket.isConnected() && myScanner2.hasNext())
{
String s = myScanner2.next();
}
}
}
});
t1.start();
t2.start();
【问题讨论】:
-
你好,这里的Android是什么关系?
-
如果你想多线程你的 I/O 你将需要使用像 ServerSocket 和调用 accept() 来返回一个新的 Socket。一个 Socket 只能由一个线程管理,但一个线程可以管理多个 Socket。这个想法是,对于每个新连接,都会创建一个新套接字,但该套接字仅由单个线程管理。
标签: java android sockets tcpsocket