标签:ip地址 控件 list listen poi object类 display edit 使用
客户端要连接服务器:首先要知道服务器的IP地址。而服务器里有很多的应用程序,每一个应用程序对应一个端口号 所以客户端想要与服务器中的某个应用程序进行通信就必须要知道那个应用程序的所在服务器的IP地址,及应用程序所对应的端口号
TCP协议:安全稳定,一般不会发生数据丢失,但是效率低。利用TCP发生数据一般经过3次握手(所有效率低,自己百度三次握手) UDP协议:快速,效率高,但是不稳定,容易发生数据丢失(没有经过三次握手,不管服务器有空没空,信息全往服务器发,所有效率搞,但服务器忙的时候就没办法处理你的数据,容易造成数据丢失,不稳定)
首先创建一个解决方案,在解决方案下创建一个“Socket通信”windows窗体应用程序的的项目,用作服务端,然后再在解决方案下创建一个“Socket客户端”windows窗体应用程序的项目 用作客户端
Socket通信 (服务器端)
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using System.Net;
- using System.Net.Sockets;
- using System.Text;
- using System.Threading;
- using System.Threading.Tasks;
- using System.Windows.Forms;
-
- namespace Socket通信
- {
- public partial class Form1 : Form
- {
- public Form1()
- {
- InitializeComponent();
- this.txtPort.Text = "50000";
- this.txtIp.Text = "192.168.253.2";
-
- }
-
- private void btnStart_Click(object sender, EventArgs e)
- {
- try
- {
-
- Socket socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
-
-
- IPAddress ip = IPAddress.Any;
-
-
-
- IPEndPoint point = new IPEndPoint(ip, Convert.ToInt32(txtPort.Text));
-
-
- socketWatch.Bind(point);
- ShowMsg("监听成功");
-
- socketWatch.Listen(10);
-
-
- Thread th = new Thread(Listen);
-
- Control.CheckForIllegalCrossThreadCalls = false;
-
- th.IsBackground = true;
-
-
- th.Start(socketWatch);
- }
- catch
- { }
-
-
- }
-
-
-
- Dictionary<string, Socket> dic = new Dictionary<string, Socket>();
-
-
-
-
-
-
-
- Socket socketSend;
- void Listen(object o)
- {
- Socket socketWatch = o as Socket;
-
- while (true)
- {
- try
- {
-
- socketSend = socketWatch.Accept();
-
- dic.Add(socketSend.RemoteEndPoint.ToString(), socketSend);
-
-
- ShowMsg(socketSend.RemoteEndPoint.ToString() + ":" + "连接成功");
-
- comboBox1.Items.Add(socketSend.RemoteEndPoint.ToString());
-
-
-
- Thread getdata = new Thread(GetData);
- getdata.IsBackground = true;
- getdata.Start(socketSend);
- }
- catch
- { }
-
- }
-
- }
-
-
-
-
-
-
- void GetData(object o)
- {
- Socket socketSend = o as Socket;
- while (true)
- {
- try
- {
-
- byte[] buffer = new byte[1024 * 1024 * 2];
-
-
- int r = socketSend.Receive(buffer);
-
- if (r == 0)
- {
-
- break;
- }
-
-
-
- string str = Encoding.UTF8.GetString(buffer, 0, r);
-
-
- ShowMsg(socketSend.RemoteEndPoint.ToString() + ":" + str);
- }
- catch
- {
-
- }
- }
- }
- private void ShowMsg(string str)
- {
- txtLog.AppendText(str + "\r\n");
- }
-
-
-
-
-
-
-
- private void btnSend_Click(object sender, EventArgs e)
- {
-
- if (comboBox1.SelectedItem == null)
- {
- MessageBox.Show("请选择客户端");
- return;
- }
-
-
- string str = txtMes.Text.Trim();
- byte[] buffer = System.Text.Encoding.UTF8.GetBytes(str);
-
- string getIp = comboBox1.SelectedItem as string;
-
- socketSend = dic[getIp] as Socket;
- socketSend.Send(buffer);
- }
- }
- }
Socket客户端 (客户端)
当这两个项目(服务端,和客户端)都写好后,怎么测试呢?
首先我们将服务端设置启动项,然后启动调试,
然后我们在将鼠标移动到“Socket客户端” (客户端)这个项目下,鼠标右键项目名称“Socket客户端”--》调试--》启动实例 就可以了。
开打开始命令 cmd telnet 10.18.16.46 5000 即telnet 服务器ip地址 绑定的端口号
如果用命令,需要在 控制面板--》程序和功能--》打开或关闭windows功能 将Telnet 服务器,和Telnet客户端打上钩
---------------------------------------------------------------------------------------------------------------
注释一下:
//创建一个用来监听的Socket对象(参数1:表示采用IPv4,参数2:表示使用数据流来传输数据,而不是数据包 参数3:表示采用Tcp协议)
Socket skConn =newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
//创建IP和监听端口(参数1:IP地址 参数2:端口号是9999)
IPEndPoint endPoint=newIPEndPoint(IPAddress.Parse("192.168.253.3"),9999);
socket 客户端和服务端通信
标签:ip地址 控件 list listen poi object类 display edit 使用
原文地址:http://www.cnblogs.com/zhengwei-cq/p/7598958.html