使用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. 在搞OSS对象存储中发现了自身的一些不足

    最近在搞OSS对象存储,发现了自身的一些不足,趁着有空在此做个总结,希望能够帮助到大家!!! 首先解释下OSS,Object Storage Service(对象存储服务),一般的云公司,都会提供OS ...

  2. Android 自定义Vie 对勾CheckBox

    天在美团点外卖,有一个商品推荐的条目,上面的CheckBox是自定义的,虽然我们大部分都是用图片来自定义样式.但是还是可以自定义View来绘制的,只要画一个圆和对勾即可. 最终效果 最终效果.png ...

  3. 13.深入k8s:Pod 水平自动扩缩HPA及其源码分析

    转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com 源码版本是1.19 Pod 水平自动扩缩 Pod 水平自动扩缩工作原理 Pod 水平自动 ...

  4. Layman 对PHP源码进行加密保护

    加密软件(php_screw) >下载网站:http://sourceforge.net/projects/php-screw/ >描述:php文件通常以文本格式存贮在服务器端, 很容易被 ...

  5. IO那些事

    IO(Input\Output): 即输入输出,通常指数据在存储器(内部和外部)或其他周边设备之间的输入和输出,是信息处理系统(例如计算机)与外部世界(可能是人类或另一信息处理系统)之间的通信.说的简 ...

  6. CPU 执行程序的秘密,藏在了这 15 张图里

    前言 代码写了那么多,你知道 a = 1 + 2 这条代码是怎么被 CPU 执行的吗? 软件用了那么多,你知道软件的 32 位和 64 位之间的区别吗?再来 32 位的操作系统可以运行在 64 位的电 ...

  7. helm包管理工具

    K8S正常部署应用是如下方式 kubectl create deployment web --image=nginx --dru-run=client -o yaml > web.yaml ku ...

  8. 多测师讲解a'pi自动化框架设计思想_高级讲师肖sir

    API自动化框架API自动化框架分为conf.data.utils.api.testcase.runner.report.log8个模块.conf是用来储存系统环境.数据库.邮件等的配置参数.项目的绝 ...

  9. 【C语言C++编程入门】——程序结构:构思!

    学习编程语言的最好方法是编写程序.一般来说,初学者编写的第一个程序是一个名为"Hello World"的程序,它简单地将"Hello World"打印到你的电脑 ...

  10. centos7下面 es7.5 搭建

    centos6 搭建 参考 https://www.cnblogs.com/php-linux/p/8758788.html 搭建linux虚拟机 https://www.cnblogs.com/ph ...