浅谈C#Socket
好不容易把socket通信搞懂一点,比较喜欢做笔记,嘿嘿~
socket通信是C#中非常基础的一个知识点,我这里用到的是基于Tcp协议的socket通信。Tcp会有三次握手连接通信.
一、 创建服务端socket的步骤:
1.首先需要引用socket通信中所用到的名称空间;
using System.Net;
using System.Threading;
using System.Net.Sockets;
这三个名称空间是为socket通信打基础,没有这三个名称空间无法实现socket通信.
2.接下来就是要创建一个socket的对象了,创建socket对象是为了方便客户端与服务端之间的通信,如果你还不明白,就请往下继续看;
Socket serverSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
在这里面有几个知识点我要补充一下:
socket类中的参数我做简要阐述,AddressFamily.InterNetwork简单来说就是使用内网,啥,你不知道内网是什么东东?至于内网是啥,内网就是不能上互联网的局域网;SocketType.Stream是流式的套接字类型,这种套接字类型是一种可靠且双向,基于连接的字节流,不重复数据,简单一点就是支持双向通信;ProtocolType.Tcp指的是使用基于tcp协议的通信协议。
3.绑定IP地址和端口号;
//将字符串类型的IP地址转换为IPAddress类型
IPAddress ip = IPAddress.Parse("173.168.5.15");
//标识网络地址
EndPoint point = new IPEndPoint(ip,port);
serverSocket.Bind(point);
如果你想实现socket通信就必须绑定IP地址和端口号,IP地址是计算机的通信地址,端口号指向计算机中某个软件或者说是应用程序;
4.监听客户端的连接;
serverSocket.Listen();
参数指的是监听客户端的最大数量。
5.为连接到的客户端新建一个socket;
Socket ListenClientSocket= serverSocket.Accept();
这是规定,如果不新建一个socket无法通信。
这一步完成时客户端给服务端发送消息且客户端会连接到服务端,完成第一次握手。
6.向客户端发送消息;
ListenClientSocket.Send(data);
此时服务端给客户端发送消息完成第二次握手。
7.接受客户端消息;
byte[] data2 = new byte[];
int length=ListenClientSocket.Receive(data2);
string message2=Encoding.UTF8.GetString(data2,,length);
Console.WriteLine("接收到客户端传来的消息:"+message2);
服务端接收到客户端的消息完成第三次握手。
服务端socket 完整代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Threading;
using System.Net.Sockets; namespace serverSocketTest2
{
class Program
{
static int port = ;
static void Main(string[] args)
{
//创建一个socket的对象
Socket serverSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
//将字符串类型的IP地址转换为IPAddress类型
IPAddress ip = IPAddress.Parse("173.168.5.15");
//标识网络地址
EndPoint point = new IPEndPoint(ip,port);
serverSocket.Bind(point);
//开始监听
serverSocket.Listen();
Console.WriteLine("等待客户端连接..."); //为连接客户端需要新建一个线程
Socket ListenClientSocket= serverSocket.Accept();//暂停当前线程,等待客户端连接之后再执行之后的语句
Console.WriteLine("客户端连接成功! 真是令人振奋!");
//传送的消息
string message = "Hello Client!";
//将字符串类型的数据转换为byte类型的数组
byte[] data=Encoding.UTF8.GetBytes(message);
//发送消息
ListenClientSocket.Send(data); /////接受客户端数据
byte[] data2 = new byte[]; int length=ListenClientSocket.Receive(data2);
string message2=Encoding.UTF8.GetString(data2,,length);
Console.WriteLine("接收到客户端传来的消息:"+message2); Console.ReadKey();
}
}
}
二、 创建客户端socket的步骤如下:
1.引用进行socket通信的名称空间;
using System.Net;
using System.Threading;
using System.Net.Sockets;
原因我不再赘述了,相信聪明的你们都懂.
2.客户端向服务端发送连接的请求,建立客户端和服务端的连接;
clientSocket.Connect(ip,port);
这是第一次握手。本次握手与服务端里的第一次握手同步执行,其实这次握手也是服务端里的第一次握手。
3.接收数据;
clientSocket.Receive(data);
在这里需要将客户端接收到的数据返回一个长度并存储到byte数组里。
4.将字节型数据转换成字符串型的数据;
string message=Encoding.UTF8.GetString(data,,length);
5.发送数据
clientSocket.Send(data2);
第二次握手连接。本次握手与服务端里的第二次握手同步执行,其实这次握手也是服务端里的第二次握手。
客户端socket 完整代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Threading;
using System.Net.Sockets; namespace clientSocketTest2
{
class Program
{
static int port = ;
static void Main(string[] args)
{
//新建一个socket
Socket clientSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
IPAddress ip = IPAddress.Parse("173.168.5.15"); //客户端向服务端发送连接的请求,建立客户端和服务端的连接
clientSocket.Connect(ip,port);
//存储数据,接收数据
byte[] data=new byte[];
int length=clientSocket.Receive(data);
//转换为字符串型的数据
string message=Encoding.UTF8.GetString(data,,length);//0,length 表示的是发送的数据的长度
Console.WriteLine("接收到来自服务端的数据:"+message); /////// 发送数据
string message2 = Console.ReadLine();
byte[] data2=Encoding.UTF8.GetBytes(message2);
clientSocket.Send(data2); Console.ReadKey(); }
}
}
这是我的理解,如果有不足的地方,请指教,共同学习!希望共同进步!
浅谈C#Socket的更多相关文章
- 浅谈tcp socket的backlog参数
最近看netty源码碰到ChannelOption.SO_BACKLOG参数,通过跟踪代码发现其实是用于设置底层tcp socket的backlog参数,由于不了解这个参数,有必要彻底的理解一下. 底 ...
- 浅谈android Socket 通信及自建ServerSocket服务端常见问题
摘 要:TCP/IP通信协议是可靠的面向连接的网络协议,它在通信两端各建立一个Socket,从而在两端形成网络虚拟链路,进而应用程序可通过可以通过虚拟链路进行通信.Java对于基于TCP协议的网络通 ...
- [转]浅谈Flash Socket通信安全沙箱
用过Flash socket的同学都知道,Flash socket通讯有安全沙箱问题.就是在Flash Player发起socket通信时,会向服务端获取安全策略,如果得不到服务端响应,flash将无 ...
- 浅谈Socket编程
浅谈Socket编程 说到Socket,想必大家会觉得陌生又熟悉.许多同学听说过Socket,但仅仅知道它翻译成中文叫做套接字,除此之外似乎并没有太多的了解了.那么今天我就来抛砖引玉地聊一聊Socke ...
- 浅谈IM软件怎样建立安全socket连接、登录
----------------------------------------------------欢迎查看IM软件业务知识<专栏>-------------------------- ...
- 浅谈JAVA中如何利用socket进行网络编程(二)
转自:http://developer.51cto.com/art/201106/268386.htm Socket是网络上运行的两个程序间双向通讯的一端,它既可以接受请求,也可以发送请求,利用它可以 ...
- TODO:浅谈pm2基本工作原理
TODO:浅谈pm2基本工作原理 要谈Node.js pm2的工作原理,需要先来了解撒旦(Satan)和上帝(God)的关系. 撒旦(Satan),主要指<圣经>中的堕天使(也称堕天使撒旦 ...
- [转]浅谈https\ssl\数字证书
浅谈https\ssl\数字证书 http://www.cnblogs.com/P_Chou/archive/2010/12/27/https-ssl-certification.html 全球可信的 ...
- Web服务器和动态语言如何交互--CGI&FastCGI&FPM浅谈
一个用户的Request是如何经过Web服务器(Apache,Nginx,IIS,Light)与后端的动态语言(如PHP等)进行交互并将结果返回给用户的呢? 本文浅谈个人观点,可能有误,欢迎拍砖,共同 ...
随机推荐
- PL/SQL Developer安装详解(32位客户端免安装版)
PL/SQL Developer是一个集成开发环境,专门开发面向Oracle数据库的应用.PL/SQL也是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL).PL/S ...
- FC400A与400B的区别
FC400B就比400A多了一个功能,那就是联动,也就是说主机关了后,电子净化箱也会被关掉,这样就不需要去手动关闭电源,更加方便,估计是很多工业企业上需要这样的功能,所以就升级了这么个版本.
- 数据库备份checksum选项你会用么?
SQL SERVER有好多好多功能,选项也一大堆,很多功能选项并不常用.但是如果真有这种需求的时候又想不起来~ 本篇我们就来聊聊备份里的选项checksum,这是个啥玩意?听都没听过?来看下图: 就是 ...
- AsyncTask 异步处理
1 package com.ch.day8_asynctaskdemo; 2 3 import java.util.ArrayList; 4 5 import com.ch.myutils.NetWo ...
- qt qml ajax 获取 json 天气数据示例
依赖ajax.js类库,以下代码很简单的实现了获取天气json数据并展示的任务 [TestAjax.qml] import QtQuick 2.0 import "ajax.js" ...
- dm9000c 移值新内核 linux-4.1.24
错误 1 /home/dm9000/dm9dev9000c.c:309: error: conflicting types for 'phy_read'include/linux/phy.h:637: ...
- openWrt 安装与实践 II
1. 启动ubuntu上面的openwrt虚拟机之后, 设置一下虚拟机的网卡: 第1个网卡: Host-only 第2个网卡: NAT 2. 查看网络配置: root@OpenWrt:/etc/con ...
- shell-脚本入门【转】
转自:http://blog.csdn.net/gexiaobaohelloworld/article/details/7973846 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?) ...
- Spring+SpringMVC+MyBatis+LogBack+C3P0+Maven+Git小结(转)
摘要 出于兴趣,想要搭建一个自己的小站点,目前正在积极的准备环境,利用Spring+SpringMVC+MyBatis+LogBack+C3P0+Maven+Git,这里总结下最近遇到的一些问题及解决 ...
- three.js初涉略(一)
<!-- 最近要研究一下webgl,发现了webgl中文网(http://www.hewebgl.com/article/articledir/1).边研究教程边做下记录 --> thre ...