使用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. IDEA配置jQuery,$符号不再显示黄色波浪线

    在使用IDEA搭建Maven的Web环境时,编写的JQuery入口函数时,遇到了未知符号的提示,并且在前端页面js的console里报错. 以下是错误信息:  解决方案:  继续看图: 配置成功生效: ...

  2. AES加密 Pkcs7 (BCB模式) java后端版本与JS版本对接

    1.BCB模式是需要设置iv偏移量和Key值,这两个值就像账号和密码一样,当这两个值一致时才能确保加密和解密的数据一致.(ps:这两个值千万不能暴露出去哦!) 2.JAVA版本代码: 这里的iv偏移量 ...

  3. 067 01 Android 零基础入门 01 Java基础语法 08 Java方法 05 数组作为方法参数

    067 01 Android 零基础入门 01 Java基础语法 08 Java方法 05 数组作为方法参数 本文知识点:数组作为方法参数 说明:因为时间紧张,本人写博客过程中只是对知识点的关键步骤进 ...

  4. C++中cout和cerr

    参考:https://blog.csdn.net/garfield2005/article/details/7639833 之前一直在用,但就是没在意两者到底有啥却别,今天又想到这个问题,总结下吧(以 ...

  5. ISP-OB, pedestal 以及ISP概述

    网上的直接参考资料 1. https://zhuanlan.zhihu.com/p/36896537 2. https://blog.csdn.net/m0_38049850/article/deta ...

  6. VUE 安装项目

    注意:在cmd中执行的命令 1,前提是安装了node.js 查看 npm 版本号 2,创建项目路径 mkdir vue cd vue 3,安装vue-cli (脚手架) npm install -个v ...

  7. 透视HTTPS建造固若金汤的城堡

    为什么有 HTTPS?因为 HTTP 不安全! 现在的互联网已经不再是 "田园时代","黑暗森林" 已经到来.上网的记录会被轻易截获,网站是否真实也无法验证,黑 ...

  8. 技术分享丨华为鲲鹏架构Redis知识二三事

    摘要:华为云鲲鹏Redis,业界首个基于自研ARM-Based全栈整合的Redis云服务,支持双机热备的HA架构,提供单机.主备.Proxy集群.Cluster集群实例类型,满足高读写性能场景及弹性变 ...

  9. python的PEP8代码规范

    一.缩进:每级缩进用4个空格.如果缩进不正确或缩进格式不统一,一般错误信息会明确告诉你,但有时也会出现invalid syntax报错.所谓缩进不正确,python的缩进是四个空格或一个TAB,如果缩 ...

  10. 2017-18一《电子商务概论》专科作业--经管B1601/2、经管B1631

    第1次作业: 1.你如何来定义和理解电子商务?电子商务对社会经济带了怎样的影响,企业.消费者的反应如何?你知道哪些电子商务企业,他们都属于什么类型? 2.请详细阐述应该如何关注哪些事项才能在淘宝网成功 ...