java监听多个端口,使用多线程在Java服务器中同时侦听两个端口

I am building a simple Java server which simultaneously listens for client request on two ports simultaneously using two ServerSocket instances. Here is the code for Server:

import java.io.PrintWriter;

import java.io.OutputStream;

import java.net.ServerSocket;

import java.net.Socket;

class Socket1 implements Runnable

{

public void run()

{

try

{

ServerSocket serverSock=new ServerSocket(5000);

while(true)

{

Socket sock=serverSock.accept();

PrintWriter writer=new PrintWriter(sock.getOutputStream());

String text="Welcome to Port 5000";

writer.println(text);

}

}

catch(Exception e)

{

System.out.println("Error");

}

}

}

class Socket2 implements Runnable

{

public void run()

{

try

{

ServerSocket serverSock=new ServerSocket(3000);

while(true)

{

Socket sock=serverSock.accept();

PrintWriter writer=new PrintWriter(sock.getOutputStream());

String text="Welcome to Port 3000";

writer.println(text);

}

}

catch(Exception e)

{

System.out.println("Error");

}

}

}

public class Server

{

public static void main(String[] args)

{

Socket1 s1=new Socket1();

Socket2 s2=new Socket2();

Thread t1=new Thread(s1);

Thread t2=new Thread(s2);

t1.start();

t2.start();

}

}

Now code for Client1:

import java.io.InputStreamReader;

import java.io.BufferedReader;

import java.net.Socket;

public class Client1

{

public static void main(String[] args)

{

try

{

Socket s=new Socket("127.0.0.1", 5000);

InputStreamReader streamReader=new InputStreamReader(s.getInputStream());

BufferedReader reader=new BufferedReader(streamReader);

String text=reader.readLine();

System.out.println(text);

reader.close();

}

catch(Exception e)

{

System.out.println("Error");

}

}

}

Client2 contains the same code as Client1, the only difference being that it tries to connect to port 3000.

Now, I execute Server.java first using command prompt. While the server blocks, I open two separate command prompts and execute Client1.java on one command prompt and Client2.java on the other command prompt. But, both clients go to blocking state and I get no output. Any idea how to solve this ?

解决方案

PrintWriter is buffered by defaut. Add a writer.flush() (or even better a close() since you're not using the stream anymore) after writer.println().

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值