Java套接字编程 [英] Java Socket Programing

查看:117
本文介绍了Java套接字编程的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问题:

我编写了一个 java套接字服务器,当我从客户端向它发送第一条消息时,该服务器就会发送响应.但是我想根据第一个响应再发送一条消息.在第一个回应之后,我没有收到其他回应吗?

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?

这是服务器代码:

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();
        }



    }
}

推荐答案

一旦建立了传入连接,则应委派处理该传入连接到另一个Thread的责任,否则将阻塞接受"线程,直到当前连接已关闭...

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();
}

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);
    }
}

这篇关于Java套接字编程的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆