使用Socket编程创建简单服务器和客户端

要知道的

Socket—AddressFamily, SocketType, ProtocolType

https://blog.csdn.net/weixin_42464466/article/details/84782870

  • AddressFamily.Internet表示IPV4地址

  • AddressFamily.InternetV6表示IPV6地址

  • SocketType.Stream-数据流 对应TCP协议传输数据

  • SocketType.gram-数据报 对应UDP协议传输数据

  • ProtocolType.TCP

  • ProtocolType.UDP

EndPoint和IPEndPoint

  • 节点,标明了IP地址和端口号,由于 套接字(Socket) 需要绑定在一个进程上面,通过节点(IP: port)来确定

  • 对于TCP/IP协议而言,一台计算机有 0~66535个端口(有的已被占用,自定义申请时多使用靠后的端口号)

参考:https://blog.csdn.net/tianlansedeshijie/article/details/95357734

  • IPEndPoint继承于EndPoint。IPEndPoint引用的时候参数为IP和端口。IPEndPoint iep = new IPEndPoint(IPAddress.Any, 9050);

  • .net中 Bind(EndPoint localEP);方法参数是EndPoint,填入IPEndPoint会按照EndPoint参数执行。

EndPoint是IPEndPoint的基类,IPEndPoint可以强转为EndPoint。EndPoint ep = (EndPoint)iep;

  • 主要原因是IPEndPoint可以自己写入IP地址和端口。

Socket三种监听方式

https://www.cnblogs.com/pctzhang/archive/2012/02/02/2335324.html

  • new Socket(...).Accept()

  • new Socket(...).AcceptAsync(SocketAsyncEventArgs e)

  • new Socket(...).BeginAccept()

Semaphore

#regin和#endregin

归并折叠其中的代码块

源码

功能

  • 互相发送一条消息并接收

  • 暂无用户自定义消息内容功能—— Console.ReadLine()

  • 暂无多次通讯功能——线程中添加while循环或其他(异步接收方法等)

// 服务器端
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading; namespace Demo01_SocketTest_Sever
{
class SeverEnd
{
private static Socket severSocket;
static void Main(string[] args)
{
// 1. 建立服务器
severSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
// 2. 绑定进程
severSocket.Bind(new IPEndPoint(IPAddress.Parse("192.168.0.105"),6666));
// 3. 规定同时连接客户端数量
severSocket.Listen(10);
// 4. 提示服务器启动成功
Console.WriteLine("服务器启动成功");
// 5. 建立Accept等待连接线程(Accpet方法如果没有连接则会挂起,这里使用线程来处理)
Thread severAcceptThread = new Thread(SeverAccept);// new Thread(委托)
severAcceptThread.Start();
// 6. 暂停主线程
Console.ReadKey();
} // 线程委托方法——Accept
private static void SeverAccept()
{
// 1. 建立客户端实例
Socket clientInstance = severSocket.Accept();
// 2. 向客户端发送消息肯定连接成功
clientInstance.Send(Encoding.Default.GetBytes("服务器发来消息:连接成功"));
// 3. 建立Receive接收消息线程(Receive方法如果没有连接则会挂起,这里使用线程来处理)
Thread severReceiveThread = new Thread(SeverReceive);
severReceiveThread.Start(clientInstance);
}
// 线程委托方法——Receive
private static void SeverReceive(Object clientSocket)
{
// 1. 构建byte数组(充当缓冲区用于存储客户端发来的消息)
byte[] data = new byte[1024];
// 2. 接收客户端clientSocket发来的消息,并存储至data缓冲区,且返回数据字节长度
int length = (clientSocket as Socket).Receive(data);
// 3. 打印输出接收到的消息(相当于处理数据)
Console.WriteLine(Encoding.UTF8.GetString(data,0,length));
}
}
} // 客户端
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading; namespace Demo01_SocketTest_Client
{
class Program
{
private static Socket clientSocket;
static void Main(string[] args)
{
// 1. 创建客户端Socket
clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// 2. 建立连接(请求,对应SeverEnd中第五步)
clientSocket.Connect(new IPEndPoint(IPAddress.Parse("192.168.0.105"),6666));
// 3. 提示连接成功
Console.WriteLine("连接成功");
// 4. 向服务器发送消息
clientSocket.Send(Encoding.UTF8.GetBytes("来自客户端:你好呀服务器!"));
// 5. 建立Receive接收消息线程(接收来自服务器端的消息),Receive方法如果没有连接则会挂起,这里使用线程来处理
Thread clientReceiveThread = new Thread(ClientReceive);
// 6. 暂停主线程
Console.ReadKey();
} // 线程委托方法
private static void ClientReceive()
{
// 1. 构建byte数组(充当缓冲区用于存储服务器端发来的消息)
byte[] data = new byte[1024];
// 2. 接收由服务器端发来的消息,并存储至data缓冲区,且返回消息字节长
int length = clientSocket.Receive(data);
// 3. 打印输出接收到的消息(相当于处理数据)
Console.WriteLine(Encoding.UTF8.GetString(data,0,length));
}
}
}

Socket创建简单服务器和客户端程序的更多相关文章

  1. node.js中通过dgram数据报模块创建UDP服务器和客户端

    node.js中 dgram 模块提供了udp数据包的socket实现,可以方便的创建udp服务器和客户端. 一.创建UDP服务器和客户端 服务端: const dgram = require('dg ...

  2. python socket之tcp服务器与客户端demo

    python socket之tcp服务器与客户端demo 作者:vpoet mails:vpoet_sir@163.com server: # -*- coding: cp936 -*- ''' 建立 ...

  3. 使用Visual Studio 2010 创建简单的Silverlight应用程序

    使用Visual Studio 2010 创建简单的Silverlight应用程序 Silverlight是创建动态的引人的RIAs(Rich Internet Application)的新方法.这里 ...

  4. 在公司内网上创建自己的 OSM.Planet 街道级别地图服务器及其客户端程序

    转自我的BLOG http://blog.csdn.net/goldenhawking/article/details/6402775  最近经过陛下点拨,涉猎了“OpenStreetMap”,做了不 ...

  5. python3实现UDP协议的简单服务器和客户端

    利用python中的socket模块中的来实现UDP协议,这里写一个简单的服务器和客户端.为了说明网络编程中UDP的应用,这里就不写图形化了,在两台电脑上分别打开UDP的客户端和服务端就可以了. UD ...

  6. php编写tcp服务器和客户端程序

    这是我从别的地方看到的. 1.修改php.ini,打开extension=php_sockets.dll 2.客户端程序 SocketClient.php <?php set_time_limi ...

  7. Raknet实现的简单服务器与客户端的交互

    1. 首先下载Raknet的源代码,我用的是4.0的,不是最新的,解压后编译DLL工程,编译完成后进入解压的根目录下,进入Lib文件夹下找到RakNet_DLL_Debug_Win32.dll,  R ...

  8. socket,实现服务器和客户端对话

    服务器: #define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<string>#include<WinSock ...

  9. python学习之socket创建html服务器

    #coding:utf-8 import socket def process_request(request): request.recv(1024)#读取接受的字节 request.send(&q ...

随机推荐

  1. 国产化之路-安装达梦DM8数据库

    专题目录 国产化之路-统信UOS操作系统安装 国产化之路-国产操作系统安装.net core 3.1 sdk 国产化之路-安装WEB服务器 国产化之路-安装达梦DM8数据库 国产化之路-统信UOS + ...

  2. 简单区间dp

    题目链接 对于基本区间dp,设dp[l][r]是区间l到r的最大价值. 我们可以枚举区间的长度,在枚举左端点,判断即可. 当右端点大于n,就break. dp[l][r]=max(dp[l+1][r] ...

  3. 使用AirtestProject+pytest做支付宝小程序UI自动化测试

    一,前言 1,背景 因公司业务需要做支付宝小程序的UI自动化测试,于是在网上查找小程序的自动化资料,发现微信小程序是有自己的测试框架的,但几乎找不到支付宝小程序UI自动化测试相关的资料.白piao失败 ...

  4. MySQL【灵魂拷问】

    MySQL 一直是本人薄弱的部分,后面会多总结 MySQL 的文章,毕竟 MySQL 涉及到数据存储.锁.磁盘寻道.分页等操作系统概念,而且互联网对 MySQL 的注重程度是不言而喻的,后面要加紧对 ...

  5. 机器学习 KNN算法原理

    K近邻(K-nearst neighbors,KNN)是一种基本的机器学习算法,所谓k近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表.比如:判断一个人的人品,只需要观察 ...

  6. 使用python编写正逆序乘法表

    # 99乘法表 # 顺序 for i in range(1,10): n = 1 while n <= i: print('{}x{}={}'.format(n,i,n*i),end=' ') ...

  7. Warning: Permanently added the RSA host key for IP address '52.74.223.119' to the list of known hosts.

    如果出现这个问题,说明你的github缺少公钥 使用 ssh -T git@gtihub.com 去测试 1.生成密钥 ssh-keygen -t rsa -C "your name&quo ...

  8. Jmeter设计压力测试场景

    1.哪些业务需要做压力测试? 比较常用的功能模块 单一业务场景或者多业务场景 项目需要做的业务场景 2.压力测试的并发数是多少? 有预期的数值?一次性达到?有上次性能测试的结果值? 无预期的数值?只有 ...

  9. Jmeter请求之接口串联自动化测试(未完)

    方案一:添加Cookie管理器,把用户的登录状态存在cookie管理器中,类似于浏览器 存储测试结果: 监听器->保存响应到文件,对结果进行存储 文件名前缀:保存到哪个地方前缀是什么D:\tes ...

  10. 飞翔---------双重线性dp

    题目: 鹰最骄傲的就是翱翔,但是鹰们互相都很嫉妒别的鹰比自己飞的快,更嫉妒其他的鹰比自己飞行的有技巧.于是,他们决定举办一场比赛,比赛的地方将在一个迷宫之中. 这些鹰的起始点被设在一个N*M矩阵的左下 ...