当前位置: 技术问答>java相关
服务器端套接字程序如何始终运行?
来源: 互联网 发布时间:2015-04-15
本文导语: 是简单的套接字通讯程序 服务器端程序运行后,客户端程序运行,两者建立通讯,没有问题。 但是关闭客户端程序后,服务器端也就自动关闭,如何使服务器端依旧运行呢??? 谢谢指点!! | ...
是简单的套接字通讯程序
服务器端程序运行后,客户端程序运行,两者建立通讯,没有问题。
但是关闭客户端程序后,服务器端也就自动关闭,如何使服务器端依旧运行呢???
谢谢指点!!
服务器端程序运行后,客户端程序运行,两者建立通讯,没有问题。
但是关闭客户端程序后,服务器端也就自动关闭,如何使服务器端依旧运行呢???
谢谢指点!!
|
import java.net.*;
import java.io.*;
public class SimpleServer {
public static void main(String args[]) {
ServerSocket s = null;
Socket s1;
String sendString = "Hello Net World!";
OutputStream s1out;
DataOutputStream dos;
// Register your service on prot 5432
try {
s = new ServerSocket(5432);
} catch(IOException e) {}
// Run the listen/accept loop forever
while(true) {
try {
// Wait here and listen for a connection
s1 = s.accept();
// get a communication stream for socket
s1out = s1.getOutputStream();
dos = new DataOutputStream(s1out);
// send your string! (UTF provides machine-independent format)
dos.writeUTF(sendString);
//Close the connection, but not the server socket
s1out.close();
s1.close();
}
catch(IOException e) {}
}
}
}
import java.io.*;
public class SimpleServer {
public static void main(String args[]) {
ServerSocket s = null;
Socket s1;
String sendString = "Hello Net World!";
OutputStream s1out;
DataOutputStream dos;
// Register your service on prot 5432
try {
s = new ServerSocket(5432);
} catch(IOException e) {}
// Run the listen/accept loop forever
while(true) {
try {
// Wait here and listen for a connection
s1 = s.accept();
// get a communication stream for socket
s1out = s1.getOutputStream();
dos = new DataOutputStream(s1out);
// send your string! (UTF provides machine-independent format)
dos.writeUTF(sendString);
//Close the connection, but not the server socket
s1out.close();
s1.close();
}
catch(IOException e) {}
}
}
}
|
注意退出应用程序时的线程处理!!!
while (true)//接受多个用户
{
if(!mRMonitorServer.getRMonitorRunning())//服务端主动退出
{
exitListenSocket(-1);
return false;
}
try
{
mServerSocket.setSoTimeout(100);//waiting 100 ns ,goto
mSocket = mServerSocket.accept();
mServerSocket.setSoTimeout(0);
ConnectionOne cConnectionOne = new ConnectionOne ( mRMonitorServer,this,mSocket
,miIncrement );
cConnectionOne.start();
...
}
while (true)//接受多个用户
{
if(!mRMonitorServer.getRMonitorRunning())//服务端主动退出
{
exitListenSocket(-1);
return false;
}
try
{
mServerSocket.setSoTimeout(100);//waiting 100 ns ,goto
mSocket = mServerSocket.accept();
mServerSocket.setSoTimeout(0);
ConnectionOne cConnectionOne = new ConnectionOne ( mRMonitorServer,this,mSocket
,miIncrement );
cConnectionOne.start();
...
}
|
当一个客户端请求来的时候,socketServer创建一个socket,完成客户端和服务器的通信,当通信结束的时候,socket应该是被关闭的,socketServer依然监听来之客户端的请求。把代码贴出来看看把
|
加个while死循环就可以一直运行了
|
如果你的服务器的客户会并发请求的话,
在accept之后,最好用一个新的线程去
处理客户的请求。
在accept之后,最好用一个新的线程去
处理客户的请求。
|
同意楼上
将ServerSocket的accept()放在循环里
用一个新的线程去处理accept的socket
将ServerSocket的accept()放在循环里
用一个新的线程去处理accept的socket