用指定的本地IP(127.0.0.1)地址端口号(例如8080)来新建服务器与客户端之间的socket连接,但是在服务器端用RemoteEndPoint端口号却是个很奇怪的数(不是8080),而且经常在变。
相关代码如下:
客户端:
//用于通信的Socket
Socket socketSend;
//用于监听的SOCKET
Socket socketWatch;
//当点击开始监听的时候 在服务器端创建一个负责监听IP地址和端口号的Socket
socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//获取ip地址
IPAddress ip = IPAddress.Parse(this.txt_IP.Text.Trim());
//创建端口号
IPEndPoint point = new IPEndPoint(ip, Convert.ToInt32(this.txt_Port.Text.Trim()));
//绑定IP地址和端口号
socketWatch.Bind(point);
this.txt_Log.AppendText("监听成功" + " \r \n");
//开始监听:设置最大可以同时连接多少个请求
socketWatch.Listen(10);
//实例化回调
setCallBack = new SetTextValueCallBack(SetTextValue);
receiveCallBack = new ReceiveMsgCallBack(ReceiveMsg);
setCmbCallBack = new SetCmbCallBack(AddCmbItem);
//创建线程
AcceptSocketThread = new Thread(new ParameterizedThreadStart(StartListen));
AcceptSocketThread.IsBackground = true;
AcceptSocketThread.Start(socketWatch);
private void StartListen(object obj)
{
//Socket socketWatch = obj as Socket;
while (true)
{
//等待客户端的连接,并且创建一个用于通信的Socket
socketSend = socketWatch.Accept();
//获取远程主机的ip地址和端口号
string strIp = socketSend.RemoteEndPoint.ToString();
dicSocket.Add(strIp, socketSend);
this.cmb_Socket.Invoke(setCmbCallBack, strIp);
string strMsg = "远程主机:" + socketSend.RemoteEndPoint + "连接成功";
//使用回调
txt_Log.Invoke(setCallBack, strMsg);
//定义接收客户端消息的线程
Thread threadReceive = new Thread(new ParameterizedThreadStart(Receive));
threadReceive.IsBackground = true;
threadReceive.Start(socketSend);
}
}