一.Socket的概念
Socket其实并不是一个协议,而是为了方便使用TCP或UDP而抽象出来的一层,是位于应用层和传输控制层之间的一组接口.

当两台主机通信是,必须通过Socket连接,Socket则利用TCP/IP协议建立TCP连接.TCP连接则更依赖于底层的IP协议.Socket是控制层传输协议.

双向的通信连接实现数据的交换,连接的一端成为一个Socket.

二.网络通信三要素
IP地址(网络上主机设备的唯一标识)
端口号(定位程序)
有效端口:0~65535,其中0~1024由系统使用,开发中一般使用1024以上端口.
传输协议(用什么样的方式进行交互)
常见协议:TCP(面向连接,提供可靠的服务),UDP(无连接,传输速度快)
三.Socket的通信流程

四.C#中Socket的简单使用步骤
第一步:服务端监听某个端口

第二步:客户端向服务端地址和端口发起Socket请求

第三步:服务器接收连接请求后创建Socket连接,并维护这个连接队列

第四步:客户端和服务端就建立起了双工同信,客户端与服务端就可以实现彼此发送消息

五.简单代码实例
1.服务端代码

  1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Net;
5 using System.Net.Sockets;
6 using System.Text;
7 using System.Threading;
8
9 namespace SocketUtil
10 {
11 public class SocketServer
12 {
13 private string _ip = string.Empty;
14 private int _port = 0;
15 private Socket _socket = null;
16 private byte[] buffer = new byte[1024 * 1024 * 2];
17 /// <summary>
18 /// 构造函数
19 /// </summary>
20 /// <param name="ip">监听的IP</param>
21 /// <param name="port">监听的端口</param>
22 public SocketServer(string ip, int port)
23 {
24 this._ip = ip;
25 this._port = port;
26 }
27 public SocketServer(int port)
28 {
29 this._ip = "0.0.0.0";
30 this._port = port;
31 }
32
33 public void StartListen()
34 {
35 try
36 {
37 //1.0 实例化套接字(IP4寻找协议,流式协议,TCP协议)
38 _socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
39 //2.0 创建IP对象
40 IPAddress address = IPAddress.Parse(_ip);
41 //3.0 创建网络端口,包括ip和端口
42 IPEndPoint endPoint = new IPEndPoint(address, _port);
43 //4.0 绑定套接字
44 _socket.Bind(endPoint);
45 //5.0 设置最大连接数
46 _socket.Listen(int.MaxValue);
47 Console.WriteLine("监听{0}消息成功", _socket.LocalEndPoint.ToString());
48 //6.0 开始监听
49 Thread thread = new Thread(ListenClientConnect);
50 thread.Start();
51
52 }
53 catch (Exception ex)
54 {
55 }
56 }
57 /// <summary>
58 /// 监听客户端连接
59 /// </summary>
60 private void ListenClientConnect()
61 {
62 try
63 {
64 while (true)
65 {
66 //Socket创建的新连接
67 Socket clientSocket = _socket.Accept();
68 clientSocket.Send(Encoding.UTF8.GetBytes("服务端发送消息:"));
69 Thread thread = new Thread(ReceiveMessage);
70 thread.Start(clientSocket);
71 }
72 }
73 catch (Exception)
74 {
75 }
76 }
77
78 /// <summary>
79 /// 接收客户端消息
80 /// </summary>
81 /// <param name="socket">来自客户端的socket</param>
82 private void ReceiveMessage(object socket)
83 {
84 Socket clientSocket = (Socket)socket;
85 while (true)
86 {
87 try
88 {
89 //获取从客户端发来的数据
90 int length = clientSocket.Receive(buffer);
91 Console.WriteLine("接收客户端{0},消息{1}", clientSocket.RemoteEndPoint.ToString(), Encoding.UTF8.GetString(buffer, 0, length));
92 }
93 catch (Exception ex)
94 {
95 Console.WriteLine(ex.Message);
96 clientSocket.Shutdown(SocketShutdown.Both);
97 clientSocket.Close();
98 break;
99 }
100 }
101 }
102 }
103 }

1、服务端代码

2、客户端代码

 1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Net;
5 using System.Net.Sockets;
6 using System.Text;
7 using System.Threading;
8 using System.Threading.Tasks;
9
10 namespace SocketUtil
11 {
12 public class SocketClient
13 {
14 private string _ip = string.Empty;
15 private int _port = 0;
16 private Socket _socket = null;
17 private byte[] buffer = new byte[1024 * 1024 * 2];
18
19 /// <summary>
20 /// 构造函数
21 /// </summary>
22 /// <param name="ip">连接服务器的IP</param>
23 /// <param name="port">连接服务器的端口</param>
24 public SocketClient(string ip, int port)
25 {
26 this._ip = ip;
27 this._port = port;
28 }
29 public SocketClient(int port)
30 {
31 this._ip = "127.0.0.1";
32 this._port = port;
33 }
34
35 /// <summary>
36 /// 开启服务,连接服务端
37 /// </summary>
38 public void StartClient()
39 {
40 try
41 {
42 //1.0 实例化套接字(IP4寻址地址,流式传输,TCP协议)
43 _socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
44 //2.0 创建IP对象
45 IPAddress address = IPAddress.Parse(_ip);
46 //3.0 创建网络端口包括ip和端口
47 IPEndPoint endPoint = new IPEndPoint(address, _port);
48 //4.0 建立连接
49 _socket.Connect(endPoint);
50 Console.WriteLine("连接服务器成功");
51 //5.0 接收数据
52 int length = _socket.Receive(buffer);
53 Console.WriteLine("接收服务器{0},消息:{1}", _socket.RemoteEndPoint.ToString(), Encoding.UTF8.GetString(buffer,0,length));
54 //6.0 像服务器发送消息
55 for (int i = 0; i < 10; i++)
56 {
57 Thread.Sleep(2000);
58 string sendMessage = string.Format("客户端发送的消息,当前时间{0}", DateTime.Now.ToString());
59 _socket.Send(Encoding.UTF8.GetBytes(sendMessage));
60 Console.WriteLine("像服务发送的消息:{0}", sendMessage);
61 }
62 }
63 catch (Exception ex)
64 {
65 _socket.Shutdown(SocketShutdown.Both);
66 _socket.Close();
67 Console.WriteLine(ex.Message);
68 }
69 Console.WriteLine("发送消息结束");
70 Console.ReadKey();
71 }
72 }
73 }

2、客户端代码

3、分别开启客户端和服务器

 1 using SocketUtil;
2 using System;
3 using System.Collections.Generic;
4 using System.Linq;
5 using System.Text;
6 using System.Threading.Tasks;
7
8 namespace SocketClientApp
9 {
10 class Program
11 {
12 static void Main(string[] args)
13 {
14 SocketClient client = new SocketClient(8888);
15 client.StartClient();
16 Console.ReadKey();
17 }
18 }
19 }

开启客户端代码

 1 using SocketUtil;
2 using System;
3 using System.Collections.Generic;
4 using System.Linq;
5 using System.Text;
6 using System.Threading.Tasks;
7
8 namespace SocketServerApp
9 {
10 class Program
11 {
12 static void Main(string[] args)
13 {
14 SocketServer server = new SocketServer(8888);
15 server.StartListen();
16 Console.ReadKey();
17 }
18 }
19 }

开启服务端代码

C#中socket的简单使用的更多相关文章

  1. socket.io简单入门(一.实现简单的图表推送)

    引子:随着nodejs蓬勃发展,虽然主要业务系统因为架构健壮性不会选择nodejs座位应用服务器.但是大量的内部系统却可以使用nodejs试水,大量的前端开发人员转入全堆开发也是一个因素. 研究本例主 ...

  2. socket.io简单说明及在线抽奖demo

    socket.io简单说明及在线抽奖demo socket.io 简介 Socket.IO可以实现实时双向的基于事件的通信. 它适用于各种平台,浏览器或设备,也同样注重可靠性和速度. socket.i ...

  3. linux中socket的理解

    对linux中socket的理解 一.socket 一般来说socket有一个别名也叫做套接字. socket起源于Unix,都可以用“打开open –> 读写write/read –> ...

  4. java Socket实现简单在线聊天(二)

    接<java Socket实现简单在线聊天(一)>,在单客户端连接的基础上,这里第二步需要实现多客户端的连接,也就需要使用到线程.每当有一个新的客户端连接上来,服务端便需要新启动一个线程进 ...

  5. java Socket实现简单在线聊天(一)

    最近的项目有一个在线网页交流的需求,由于很久以前做过的demo已经忘记的差不多了,因此便重新学习一下. 我计划的大致实现步骤分这样几大步: 1.使用awt组件和socket实现简单的单客户端向服务端持 ...

  6. 操作系统底层原理与Python中socket解读

    目录 操作系统底层原理 网络通信原理 网络基础架构 局域网与交换机/网络常见术语 OSI七层协议 TCP/IP五层模型讲解 Python中Socket模块解读 TCP协议和UDP协议 操作系统底层原理 ...

  7. python中socket模块详解

    socket模块简介 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket.socket通常被叫做"套接字",用于描述IP地址和端口,是一个通信 ...

  8. Linux查看系统中socket状态

    当我们打开的socket数量很多时,netstat就会变得慢了,有什么办法可以快速查看系统中socket状态? IPv4: $ cat /proc/net/sockstat sockets: used ...

  9. (转)python标准库中socket模块详解

    python标准库中socket模块详解 socket模块简介 原文:http://www.lybbn.cn/data/datas.php?yw=71 网络上的两个程序通过一个双向的通信连接实现数据的 ...

  10. python中Socket的使用

    说明 前一段时间学习python网络编程,完成简单的通过python实现网络通信的功能.现在,将python中Socket 通信的基本实现过程做一个记录备份. Socket通信 python 中的so ...

随机推荐

  1. CCRD_TOC_2008年第5期

    中信国健临床通讯 2008年第5期 目 录   RA: 临床缓解与亚临床炎症 1.     DMARD诱导缓解的RA患者中仍有影像学确证的亚临床炎症 Brown AK, et al. Arthriti ...

  2. 小程序动态class与动态style的写法:

    style = "opacity :{{num}}" class = "vp {{opacity == 0 ? 'opacity1':''}}"

  3. ATC:一个能将主流开源框架模型转换为昇腾模型的神奇工具

    摘要:本文介绍了昇腾CANN提供的模型转换工具ATC,介绍了其功能.架构,并以具体样例介绍了该工具的基本使用方法以及常用设置. 本文分享自华为云社区<使用ATC工具将主流开源框架模型转换为昇腾模 ...

  4. C语言数据结构串的表示与操作的实现

    串的堆分配储存表示 typedef struct { char* ch;//若是非空字符串,则按串长分配存储区,否则ch为NULL int length;//串长度 } HString; 生成一个其值 ...

  5. python 排序的几种方式(内置排序函数, 选择排序, 冒泡排序)

    #python 排序的方法 #Python 列表有一个内置的 list.sort() 方法可以直接修改列表 list1 = [1,3,5,10,2,1] list1.sort() print(list ...

  6. php 中解析xml文件

        public function xmltoarr($path) {//xml字符串转数组         $xml= $path;//XML文件         $objectxml = si ...

  7. Day 24 24.2:逆向分析2 - 完美世界案例

    完美世界逆向分析 url:https://passport.wanmei.com/login?location=L3NhZmUv 定位到正确的断点位置 进行js改写操作 断点代码的关键字:setPub ...

  8. 2023 年 CCF 春季测试赛模拟赛 - 1

    T1 个人思路: 询问:求 \(1\) 到 \(t_i\) 路径上离 \(1\) 最远的 \(p\),使得 \(dis_{1,p} \times 2 \le d_i\).即 \(dis_{1,t} \ ...

  9. Google Earth Engine——基于改进的RSEI评估生态环境(水体掩膜后)

    未经允许,禁止随意转载,尊重他人版权,仅供学习参考,欢迎交流. 背景介绍 遥感生态指数(Remote Sensing Ecological Index)的获得,是使用主成分分析法耦合了绿度.湿度.干度 ...

  10. 2.6 EmpController

    package com.hy.controller; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.H ...