日期:2014-05-18  浏览次数:20649 次

socket开发中,服务端能不能继续保持开着?
我在使用java编写socket程序的时候遇到问题:服务端在接受了客户端发送的信息并进行处理之后,就自动关闭了。我希望服务端能够继续开着,处理可能从其它客户端发送来的请求。请问有没有办法做到这点?

------解决方案--------------------
ServerSocket server = new ServerSocket(2008);
Socket you = null;
while(true)
{
you = server.accept();
if(you != null)
// 启动服务线程;
}

这样就可以了
------解决方案--------------------
这样的socket是同步的,*(即阻塞的),应该有请求时创建一个线程去处理,对性能有影响了,网上有个异步的socket例子,可以看一下拉!可以判断力连接状态,根据状态决定关闭或监听!
------解决方案--------------------
以前用Asp.net做过:服务器端创建子线程,然后死循环不断接受客户端连接。
我也没有仔细研究过这东西,虽然是C#的代码也把它贴出来吧。

private void button1_Click(object sender, System.EventArgs e)
{
int port=Int32.Parse(textBox2.Text);
tcl=new TcpListener(System.Net.IPAddress.Parse(textBox1.Text),port);
tcl.Start();

//获得本地主机IP地址
string localhost = (Dns.GetHostByName(Dns.GetHostName())).AddressList[0].ToString();
listBox1.Items.Add( "服务器已启动 - "+localhost);

//创建子线程,不断接受客户端连接
mainThread=new Thread(new ThreadStart(acceptClient));
mainThread.IsBackground=true;
mainThread.Start();

button1.Enabled=false;
textBox3.Focus();
}

private void acceptClient()
{
while(true)
{
Socket socket=tcl.AcceptSocket();
Server server=new Server(socket,this);
users.Add(server);
}
}