我这样定义一个服务器端的Socket,但是有一个问题,就是只能接受一个客户端;求高手帮改改,什么实现不用多线程就可以实现:来一个命令处理一个,不管是那个客户端的命令。public static void main(String args[]) throws IOException
{
readAccounts();
try
{
ServerSocket server = null;
try
{
server = new ServerSocket(4701); //监听4701 端口
}catch(Exception e)
{
System.out.println("can not listen to:" + e);
}
BufferedReader is=null;//读取客户端输入
String cmd;//保存转来命令
String ResultStr="";//保存处理完后向客户端发送信息
PrintWriter os = null;//向客户端发送信息。
Socket socket =server.accept();
while(true)
{
//socket =server.accept();
is = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
cmd=is.readLine();
ResultStr=checkCommand(cmd);
os=new PrintWriter(socket.getOutputStream());
os.println(ResultStr);
os.flush();
}
}catch(Exception e)
{
System.out.println("Error" + e);
} }
{
readAccounts();
try
{
ServerSocket server = null;
try
{
server = new ServerSocket(4701); //监听4701 端口
}catch(Exception e)
{
System.out.println("can not listen to:" + e);
}
BufferedReader is=null;//读取客户端输入
String cmd;//保存转来命令
String ResultStr="";//保存处理完后向客户端发送信息
PrintWriter os = null;//向客户端发送信息。
Socket socket =server.accept();
while(true)
{
//socket =server.accept();
is = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
cmd=is.readLine();
ResultStr=checkCommand(cmd);
os=new PrintWriter(socket.getOutputStream());
os.println(ResultStr);
os.flush();
}
}catch(Exception e)
{
System.out.println("Error" + e);
} }
解决方案 »
- jsp怎样实现分页?
- String s = new String("sss");中的"sss"存在内存的什么区?初学者!!谢谢!!
- 如何能够在 JTable 单元格中显示一个超链接信息?在线等,答出立即给分
- 100分求助:swing和数据库操作的问题;
- LoadLibrary的问题
- Java,C#还是C++
- 高手来帮我启动cloudview~~!!!(人工呼吸)
- 围绕java的内容太多啦,我刚学完语言,接下来改学什么啊???
- 怎样实现APPLET和SOCKET之间的通讯
- 菜鸟问题:java中连接MSSQL用JDBC,它的驱动是免费的吗?还是JDK1。2中已经提供了?
- 谁能给个线程安全和非线程安全的代码实例?
- 求关于打开文件夹的处理方法
Socket socket =server.accept();
这段代码是接受客户端连接的,你应该把它放到一个侦听线程中,没上来一个连接再用新线程去操作该socket,说白了,你写的代码是单线程的
Socket socket =server.accept();
这句代码放到while循环里,每接受到一个客户端,就另起一个线程处理
这个socket也应该当成一个参数给服务端的线程传进去,这样线程之间的socket才独立
public class BroadcastServer implements Runnable { public static final int LOCAL_PORT = 6999;// 本地打开的端口,用于接收数据 private Socket receSock; public BroadcastServer(Socket socket) {
try {
receSock = socket; } catch (Exception ee) {
ee.printStackTrace();
}
} public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(LOCAL_PORT);
while (true) {
Socket connectSocket = serverSocket.accept();
BroadcastServer server = new BroadcastServer(connectSocket);//把socket传进去了
Thread thread = new Thread(server);
thread.start(); }
} public void run() { try {
DataInputStream dis = new DataInputStream(receSock.getInputStream());
DataOutputStream dos = new DataOutputStream(receSock.getOutputStream()); while (true) {
String strReceive = dis.readUTF();
System.out.println(strReceive);
/*
* 自己写代码
*
*/
} } catch (IOException ee) {
ee.printStackTrace();
} }} 参考下
都可以看看
这些框架就不用自己注意底层管理了,直接处理业务逻辑就可以了