java的套接字编程,Java套接字编程

该博客讨论了一个Java Socket服务器的问题,它只在接收到第一个客户端消息时发送响应。解决方案建议在接收到连接时创建新线程来处理每个连接,以便服务器可以继续接受和响应后续消息。这涉及使用`Thread`类和创建一个`Handler`类来处理每个客户端的输入和输出。

Problem:

I have written one java socket server which send response when I send first message from the client to it. But I want to send one more message based on the first response. After the first response i am not getting any other response?

Here is the Server code:

public class SendSmsServerSocket {

private final static CxpsLogger logger = CxpsLogger.getLogger(SendSmsServerSocket.class);

SendSmsServerSocket(){

try {

new SeverSocketForSms(new ServerSocket(4330));

} catch (IOException e) {

e.printStackTrace();

}

}

}

private static class SeverSocketForSms extends Thread {

private Socket socket;

private ServerSocket serversocket;

private volatile static boolean running = true;

public SeverSocketForSms(ServerSocket ssocket) throws IOException {

this.serversocket = ssocket;

start();

}

public void run() {

try{

while(running) {

this.socket = serversocket.accept();

InputStreamReader ir = new InputStreamReader(socket.getInputStream());

BufferedReader br = new BufferedReader(ir);

String msg = br.readLine();

PrintStream ps = new PrintStream(socket.getOutputStream());

ps.println("inside SeverSocketForSms: msg received is : "+msg);

}

}

catch(Exception e){

e.printStackTrace();

}

catch(Throwable t) {

System.out.println("Caught " + t + "xmlServerThread - closing thread");

}

}

public static void shutdown() {

System.out.println("Stopping socket connection and thread");

try{

socket.close();

}catch (Exception e) {

e.printStackTrace();

}

running = false;

}

public static void main (String [] args){

try {

System.out.println("Starting sms server ----- Please press Enter Key to stop the server after receiving one message");

SendSmsServerSocket s=new SendSmsServerSocket();

new Scanner(System.in).nextLine();

SeverSocketForSms.shutdown();

} catch (Exception e) {

e.printStackTrace();

}

}

}

解决方案

Once you have an incoming connection, you should delgate the responsibility for handling that incoming connection to another Thread, otherwise you will block your "accept" thread until the current connection is closed...

while (running) {

this.socket = serversocket.accept();

Thread thread = new Thread(new Handler(socket));

thread.start();

}

And the Handler

public class Handler implements Runnable {

private Socket socket;

public Handler(Socket socket){

this.socket = socket;

}

public void run() {

// You may need to add a repeat and exit clause here...

InputStreamReader ir = new InputStreamReader(socket.getInputStream());

BufferedReader br = new BufferedReader(ir);

String msg = br.readLine();

PrintStream ps = new PrintStream(socket.getOutputStream());

ps.println("inside SeverSocketForSms: msg received is : " + msg);

}

}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值