最近在学习Socket编程,将自己学习的分享出来,请大家指教。
程序源代码地址:
1、Socket通信的基本流程图
2、服务器端:
(1)winform界面
(2)创建用于监听的Socket:
Socket socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
(3)设置端口号对象
IPAddress ip = IPAddress.Any;
IPEndPoint point = new IPEndPoint(ip, Convert.ToInt32(txtPort.Text));
(4)开始监听,并设置当前时间最大客户容量
socketWatch.Bind(point);
socketWatch.Listen(10);
(5)开启新线程,用于接收客户端的连接,每有一个新的连接,就创建一个新的连接Socket。同时,为了保存每一个连接的Socket,创建一个键值对进行保存。
Thread th = new Thread(Waite);
th.IsBackground = true;
th.Start(socketWatch);
//将远程连接的客户端的IP地址和Socket存入到集合中
Dictionary<string, Socket> dicSocket = new Dictionary<string, Socket>();
void Waite(object o)
{
Socket socketWatch = o as Socket;
while (true)
{
Socket socketSend = socketWatch.Accept();
//将远程连接的客户端的IP地址和Socket存入到集合中
dicSocket.Add(socketSend.RemoteEndPoint.ToString(), socketSend);
//将远程连接的客户端的IP地址和端口号存储下拉框中
comboBox1.Items.Add(socketSend.RemoteEndPoint.ToString());
}
}
(6)在上述用于通信的Socket中,开启一个新线程,用于接收客户端发送过来的信息
Thread th = new Thread(Recive);
th.IsBackground = true;
th.Start(socketSend);
void Recive(object o)
{
socketSend = o as Socket;
while (true)
{
byte[] buffer = new byte[1024 * 1024 * 3];
int r = socketSend.Receive(buffer);
if (r == 0)
{
break;
}
string ss = System.Text.Encoding.UTF8.GetString(buffer);
}
}
(7)服务器端向客户端发送信息
string str = txtMsg.Text.Trim();
byte[] buffer = System.Text.Encoding.UTF8.GetBytes(str);
//获得用户在下拉框中选中的IP地址
string ip = comboBox1.SelectedItem.ToString();
dicSocket[ip].Send(buffer);
3、客户端
(1)winform界面
(2)在客户端创建一个用户通信的Socket
socketSend = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress ip = IPAddress.Parse(textBox1.Text);
IPEndPoint point = new IPEndPoint(ip, Convert.ToInt32(txtPort.Text));
(3)进行连接
socketSend.Connect(point);
(4)开启一个新的线程,用于接收服务器端发送的消息
Thread th = new Thread(Recive);
th.IsBackground = true;
th.Start(socketSend);
void Recive(object o)
{
socketSend = o as Socket;
while (true)
{
byte[] buffer = new byte[1024 * 1024 * 3];
int r = socketSend.Receive(buffer);
if (r == 0)
{
break;
}
string ss = System.Text.Encoding.UTF8.GetString(buffer);
}
}
(5)发送消息
string str = txtMsg.Text.Trim();
byte[] buffer=System.Text.Encoding.UTF8.GetBytes(str);
socketSend.Send(buffer);
分享到这里,如有错误,请指出