使用服务器套接字接受客户端请求

时间:2013-07-28 14:52:31

标签: java sockets socketserver

我正在尝试创建到Web服务器的套接字连接。

import java.io.IOException;
import java.io.PrintWriter; 
import java.net.ServerSocket;
import java.net.Socket;


public class Connection{
public final static int PORT = 1337;

public Connection(){
    ServerSocket svrSocket = null;
    try{
        svrSocket = new ServerSocket(PORT);
        System.out.println("Conected to: " + PORT);
        Socket con  =  null;
        while(true)
        {
            try{
                con = svrSocket.accept();//on this part the program stops
                System.out.println("Client request accepted");
                PrintWriter out = new PrintWriter(con.getOutputStream());

                out.flush();
            }catch(IOException ex)
            {
                ex.printStackTrace();

            }
        }
    }catch(IOException ex)
    {
        System.err.println(ex);
        System.out.println("Unable to attach to port");
    }


}
}

客户端请求con = svrSocket.accept();未运行。我这样说是因为此行之后的消息不显示。

为什么它不接受客户端请求,是否可以使用Web浏览器测试服务器?请原谅我糟糕的编程风格。

谢谢。

2 个答案:

答案 0 :(得分:1)

您需要让客户端连接到您的服务器,以便您的服务器能够接受连接,直到发生这种情况,代码将在该行等待。

如果您运行代码实例然后编译并运行此代码(当您的代码也在运行时),您会发现您收到客户端请求已接受消息,如果由于端口而获得IOException,则更改当你在cmd中调用netstat -o时,它们中的端口都会出现。

import java.io.*;
import java.net.*;
public class TestCon
{
    public static void main(String[] args)
    {
        Socket echoSocket = null;
        PrintWriter out = null;
        BufferedReader in = null;
        try {
            echoSocket = new Socket("127.0.0.1", 1337);
            out = new PrintWriter(echoSocket.getOutputStream(), true);
            in = new BufferedReader(new InputStreamReader(echoSocket.getInputStream()));
            out.println("Hello Server!");
            System.out.println(in.readLine());
            out.close();
            in.close();
            echoSocket.close();
        } catch (UnknownHostException e) {
            System.err.println("Host Unknown");System.exit(1);
        } catch (IOException e) {
            System.err.println("Couldn't get I/O for the connection.");System.exit(1);
        }
    }
}

答案 1 :(得分:0)

  

客户端请求con = svrSocket.accept();没有跑。

这不是客户端连接请求代码。这是服务器设置自己监听此端口并阻塞,直到收到传入连接。创建一个新的客户端程序或启动一个等待服务器启动然后使用

连接的新Thread
Socket clientSocket = new Socket ("127.0.0.1", 1337);