创建Socket-客户端
网上搜的资料,在这里简单记录一下
上一章记录了Socket在服务器端如何使用,这里记录在客户端如何使用
用途:Socket可以实现软件与软件之间的通信
流程:创建Socket——创建网络端口——将Socket与端口绑定——连线服务器
创建Socket
//1.0 实例化套接字(IP4寻址地址,流式传输,TCP协议) _socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
创建网络端口
//2.0 创建IP对象 IPAddress address = IPAddress.Parse(_ip); //3.0 创建网络端口包括ip和端口 IPEndPoint endPoint = new IPEndPoint(address, _port);
连线服务器
//4.0 建立连接 _socket.Connect(endPoint);
在此之后,便可以使用该Socket实例的.Send和.Receive实现服务器端的数据的发送与接收。与服务器端不同的是连接完成后不用生成一个专门用于通信的Socket
/// <summary> /// 向服务器发消息 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void SendMsg_Click(object sender, EventArgs e) { byte[] buffer = new byte[1024 * 1024 * 2]; buffer =Encoding.UTF8.GetBytes(textBox4.Text); _socket.Send(buffer); }
与发送不同接收需要实时的接收数据,建议创建一个新线程不停的接收客户端发送的数据
void Recive(object o) { Socket SeciveRecive = o as Socket; byte[] buffer = new byte[1024 * 1024 * 2]; int r; string str; while (true) { r = SeciveRecive.Receive(buffer); if (r == 0) { break; } str = Encoding.UTF8.GetString(buffer, 0, r); ShowMsg(SeciveRecive.RemoteEndPoint.ToString() + ":" + str); } }
总结:大致可以这样写
public partial class Form1 : Form { public Form1() { InitializeComponent(); } string _ip = "192.168.1.100"; int _port = 50000; Socket _socket = null; /// <summary> /// 连接服务器 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button1_Click(object sender, EventArgs e) { //1.0 实例化套接字(IP4寻址地址,流式传输,TCP协议) _socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //2.0 创建IP对象 IPAddress address = IPAddress.Parse(_ip); //3.0 创建网络端口包括ip和端口 IPEndPoint endPoint = new IPEndPoint(address, _port); //4.0 建立连接 _socket.Connect(endPoint); ShowMsg("连接成功"); //5.0一直监听服务器发来的消息 Thread th = new Thread(Recive); th.IsBackground = true; th.Start(_socket); } /// <summary> /// 接收客户端发送的消息 /// </summary> /// <param name="o"></param> void Recive(object o) { Socket SeciveRecive = o as Socket; byte[] buffer = new byte[1024 * 1024 * 2]; int r; string str; while (true) { r = SeciveRecive.Receive(buffer); if (r == 0) { break; } str = Encoding.UTF8.GetString(buffer, 0, r); ShowMsg(SeciveRecive.RemoteEndPoint.ToString() + ":" + str); } } void ShowMsg(string str) { textBox3.AppendText(str + "\r\n"); } /// <summary> /// 向服务器发消息 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void SendMsg_Click(object sender, EventArgs e) { byte[] buffer = new byte[1024 * 1024 * 2]; buffer =Encoding.UTF8.GetBytes(textBox4.Text); _socket.Send(buffer); } private void Form1_Load(object sender, EventArgs e) { Control.CheckForIllegalCrossThreadCalls = false; } }

浙公网安备 33010602011771号