java网络编程中如何知道对方发消息过来了

java网络编程中如何知道对方发消息过来了?
就是java如何监听套接字有消息发送过来了

可以参考一下这段代码

//1. 构造ServerSocket实例,指定服务端口。
ServerSocket servSock = new ServerSocket(servPort);


while(true)
{
   // 2.调用accept方法,建立和客户端的连接
           Socket clntSock = servSock.accept();
           SocketAddress clientAddress =    
                clntSock.getRemoteSocketAddress();
           System.out.println("Handling client at " + clientAddress);

    // 3. 获取连接的InputStream,OutputStream来进行数据读写
            InputStream in = clntSock.getInputStream();
            OutputStream out = clntSock.getOutputStream();

            while((recvMsgSize = in.read(receiveBuf)) != -1)
            {
                out.write(receiveBuf, 0, recvMsgSize);
            }   
    // 4.操作结束,关闭socket.
            clntSock.close();
}

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-03-06
先从服务器端说起。服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接。在这时如果有个客户端初始化一个Socket,然后连接服务器(connect),如果连接成功,这时客户端与服务器端的连接就建立了。客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取回应的数据,显示在界面上。
主要是
在服务器端,主要是启动Socket和监听线程。

#define DEFAULT_PORT 2000

void CServerDlg::OnStart()

{

sockaddr_in local;

DWORD dwThreadID = 0;

local.sin_family=AF_INET;

//设置的端口为DEFAULT_PORT。

local.sin_port=htons(DEFAULT_PORT);

//IP地址设置成INADDR_ANY,让系统自动获取本机的IP地址。

local.sin_addr.S_un.S_addr=INADDR_ANY;

//初始化Socket

m_Listening = socket(AF_INET,SOCK_STREAM,0);

if(m_Listening == INVALID_SOCKET)

{

return ;

}

//将本地地址绑定到所创建的套接字上

if(bind(m_Listening,(LPSOCKADDR)&local,sizeof(local)) == SOCKET_ERROR )

{

closesocket(m_Listening);

return ;

}
//创建监听线程,这样也能响应界面上操作。

m_hListenThread = ::CreateThread(NULL,0,ListenThread,this,0,&dwThreadID);

m_StartBtn.EnableWindow(FALSE);

m_StopBtn.EnableWindow(TRUE);

}
第2个回答  2014-03-06
当有客户端连接到服务端的时候会得到一个SOCKET对象,用这个对象取得输入流,并读取,如果客户端有消息过来,就会读到客户端发送过来的消息。追问

对啊 这消息能自动显示么

追答

你能得到这个消息,后面不就是你想怎么办怎么办了么。。。

相似回答