标签:
Socket的英文原意:“孔”或“插座”
作为进程通信机制,取后一个意思。通常也叫“套接字”,用于描述IP地址和端口号,是一个通信链的句柄。(就是俩程序通信用的)
Socket非常类似于电话插座
以一个电话网为例。电话的通话双方相当于互通信息的2个程序,电话号码就是IP地址。任何用户在通话前,首先要占有一部电话机,相当于申请一个Socket;
同时,要知道对方的号码,相当于对方有一个固定的Socket。
然后向对方拨号呼叫,相当于发出连接请求。
对方假如在场并空闲,拿起电话话筒,双方就可以正式通话,相当于连接成功。双方通话的过程,就是一方向电话机发出信号和对方从电话机接收信号的过程,
相当于向Socket发送数据和从Socket接收数据。
通话结束后,一方挂起电话机,相当于关闭Socket,撤销连接。
1)、服务端Welcome Socket 开始监听端口(负责监听客户端连接信息)
2)、客户端client Socket连接服务端指定端口(负责接收和发送服务端消息)
3)、服务端Welcome Socket 监听到客户端连接,创建correction socket。(负责和客户端通信)
在Internet上有很多这样的主机,这些主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务(应用程序)
例如:http使用80端口,ftp使用21端口 smtp使用25端口
两种类型:50000
流式Socket(STREAM):
一种面向连接的Socket,针对于面向连接的TCP服务应用,安全,但效率低
数据报式Socket(DATAGRAM):
一种无连接的Socket,对应于无连接的UDP服务应用,不安全(丢失数据,顺序混乱,在接收端要分析重排及要求重发),但效率高。
Socket通信基本流程图
示例:
public Form1() { InitializeComponent(); } private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { } private void btnStart_Click(object sender, EventArgs e) { //当点击开始监听时,在服务器端创建一个负责监听IP地址和端口号的Socket 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); th.IsBackground = true; th.Start(socketWatch); } /// <summary> /// 循环等待客户端的连接 并且创建与之通信用的Socket /// </summary> void Listen(object o) { Socket socketWatch = o as Socket; //等待客户端的连接 并且创建一个负责通信的Socket while (true) { Socket socketSend = socketWatch.Accept(); ShowMsg(socketSend.RemoteEndPoint.ToString() + ":" + "连接成功"); } } /// <summary> /// 追加文本,日志列表,用追加可以观察客户端发来的消息 /// </summary> /// <param name="str"></param> void ShowMsg(string str) { txtLog.AppendText(str + "\r\n"); } private void Form1_Load(object sender, EventArgs e) { Control.CheckForIllegalCrossThreadCalls = false; } }
.Net学习笔记----2015-07-06(Socket概念)
标签:
原文地址:http://www.cnblogs.com/mikie/p/4624829.html