Socket创建简单服务器和客户端程序
使用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创建简单服务器和客户端程序的更多相关文章
- node.js中通过dgram数据报模块创建UDP服务器和客户端
node.js中 dgram 模块提供了udp数据包的socket实现,可以方便的创建udp服务器和客户端. 一.创建UDP服务器和客户端 服务端: const dgram = require('dg ...
- python socket之tcp服务器与客户端demo
python socket之tcp服务器与客户端demo 作者:vpoet mails:vpoet_sir@163.com server: # -*- coding: cp936 -*- ''' 建立 ...
- 使用Visual Studio 2010 创建简单的Silverlight应用程序
使用Visual Studio 2010 创建简单的Silverlight应用程序 Silverlight是创建动态的引人的RIAs(Rich Internet Application)的新方法.这里 ...
- 在公司内网上创建自己的 OSM.Planet 街道级别地图服务器及其客户端程序
转自我的BLOG http://blog.csdn.net/goldenhawking/article/details/6402775 最近经过陛下点拨,涉猎了“OpenStreetMap”,做了不 ...
- python3实现UDP协议的简单服务器和客户端
利用python中的socket模块中的来实现UDP协议,这里写一个简单的服务器和客户端.为了说明网络编程中UDP的应用,这里就不写图形化了,在两台电脑上分别打开UDP的客户端和服务端就可以了. UD ...
- php编写tcp服务器和客户端程序
这是我从别的地方看到的. 1.修改php.ini,打开extension=php_sockets.dll 2.客户端程序 SocketClient.php <?php set_time_limi ...
- Raknet实现的简单服务器与客户端的交互
1. 首先下载Raknet的源代码,我用的是4.0的,不是最新的,解压后编译DLL工程,编译完成后进入解压的根目录下,进入Lib文件夹下找到RakNet_DLL_Debug_Win32.dll, R ...
- socket,实现服务器和客户端对话
服务器: #define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<string>#include<WinSock ...
- python学习之socket创建html服务器
#coding:utf-8 import socket def process_request(request): request.recv(1024)#读取接受的字节 request.send(&q ...
随机推荐
- 在搞OSS对象存储中发现了自身的一些不足
最近在搞OSS对象存储,发现了自身的一些不足,趁着有空在此做个总结,希望能够帮助到大家!!! 首先解释下OSS,Object Storage Service(对象存储服务),一般的云公司,都会提供OS ...
- Android 自定义Vie 对勾CheckBox
天在美团点外卖,有一个商品推荐的条目,上面的CheckBox是自定义的,虽然我们大部分都是用图片来自定义样式.但是还是可以自定义View来绘制的,只要画一个圆和对勾即可. 最终效果 最终效果.png ...
- 13.深入k8s:Pod 水平自动扩缩HPA及其源码分析
转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com 源码版本是1.19 Pod 水平自动扩缩 Pod 水平自动扩缩工作原理 Pod 水平自动 ...
- Layman 对PHP源码进行加密保护
加密软件(php_screw) >下载网站:http://sourceforge.net/projects/php-screw/ >描述:php文件通常以文本格式存贮在服务器端, 很容易被 ...
- IO那些事
IO(Input\Output): 即输入输出,通常指数据在存储器(内部和外部)或其他周边设备之间的输入和输出,是信息处理系统(例如计算机)与外部世界(可能是人类或另一信息处理系统)之间的通信.说的简 ...
- CPU 执行程序的秘密,藏在了这 15 张图里
前言 代码写了那么多,你知道 a = 1 + 2 这条代码是怎么被 CPU 执行的吗? 软件用了那么多,你知道软件的 32 位和 64 位之间的区别吗?再来 32 位的操作系统可以运行在 64 位的电 ...
- helm包管理工具
K8S正常部署应用是如下方式 kubectl create deployment web --image=nginx --dru-run=client -o yaml > web.yaml ku ...
- 多测师讲解a'pi自动化框架设计思想_高级讲师肖sir
API自动化框架API自动化框架分为conf.data.utils.api.testcase.runner.report.log8个模块.conf是用来储存系统环境.数据库.邮件等的配置参数.项目的绝 ...
- 【C语言C++编程入门】——程序结构:构思!
学习编程语言的最好方法是编写程序.一般来说,初学者编写的第一个程序是一个名为"Hello World"的程序,它简单地将"Hello World"打印到你的电脑 ...
- centos7下面 es7.5 搭建
centos6 搭建 参考 https://www.cnblogs.com/php-linux/p/8758788.html 搭建linux虚拟机 https://www.cnblogs.com/ph ...