Java中Socket长连接多线程通信,请大家帮忙写个简单的示例
谁可以帮我写一个简单的Socket长连接在客户端使用多线程向服务端发送接收数据的程序供我参考下呢?
要求是这样的:
1.在客户端建立一个长连接(把代码也写上,多谢了!)
2.客户端向服务端可以连续发送多条数据(不一定会立马收到服务端返回的信息)
3.客户端接收服务端返回的数据(由于客户端向服务端发送数据以后不一定会立即返回信息,所以要采用多线程来防止程序堵塞的问题)
如果嫌粘到这太麻烦可以法我邮箱:254595561@qq.com,小弟在这先多谢大家了!现在碰到这个问题了,真心蛋疼呀!
Java 多线程 socket 通信
[解决办法]
看看NIO的网络通讯框架Netty,Mina等,写这个很容易,看一下午就会了。
[解决办法]
俺忘记是在哪个地方考下来的代码了,盗版一下发给你了,呵呵。。
MultiJabberServer.java
public class MultiJabberServer
{
/**
* 方法名:main
* 描述:
* 作者:
* 日期:2012-8-23 下午02:38:20
* @param @param args
* @return void
*/
public static void main(String[] args)
{
ServerSocket s = null;
Socket socket = null;
try
{
s = new ServerSocket(8080);
//等待新请求、否则一直阻塞
while (true)
{
socket = s.accept();
System.out.println("socket:" + socket);
new ServeOneJabbr(socket);
}
}
catch (Exception e)
{
try
{
socket.close();
}
catch (IOException e1)
{
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
finally
{
try
{
s.close();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
public class JabberClient
{
/**
* 方法名:main 描述: 作者:白鹏飞 日期:2012-8-23 下午01:47:12
*
* @param @param args
* @return void
*/
public static void main(String[] args)
{
Socket socket = null;
BufferedReader br = null;
PrintWriter pw = null;
try
{
//客户端socket指定服务器的地址和端口号
socket = new Socket("127.0.0.1", 8080);
System.out.println("Socket=" + socket);
//同服务器原理一样
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
pw =
new PrintWriter(
new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())));
for (int i = 0; i < 10; i++)
{
pw.println("howdy " + i);
pw.flush();
String str = br.readLine();
System.out.println(str);
Thread.sleep(1000);//停一秒
}
pw.println("END");
pw.flush();
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
try
{
System.out.println("close......");
br.close();
pw.close();
socket.close();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
