C#进行Socket通信编程之一
关于Socket编程的相关资料(含实例)在网上多如牛毛,而我写这篇文章的初衷仅仅是为了记录自己的一些心得体会。
Socket提供了这样一个接口,可以方便地使程序员通过其来发送和接收网络上的数据。在利用Socket编程的时候,首先需要使用指定的地址族(如常见的IPV4或IPV6)、套接字类型(如Stream、Dgram等)和协议(如Tcp、Udp等)初始化Socket类的新实例,然后需要与IP地址和端口绑定。这些都是使用Socket编程的最基本条件。 Socket编程通常分服务器和客户端,服务器端负责接收客户端请求并处理该请求,必须具备多客户端处理能力,在性能要求、稳定性等方面要求较高,客户端在连接上服务器后向服务器发送数据或接收来自服务器的数据,之后进行处理,相对简单。
在服务器端,以TCP通信为例,Socket实现网络通信的基本思路是:
、建立流式套接字并返回套接字号,如:m_serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
、将套接字与本地地址相连,如:m_serverSocket.Bind(m_localEndPoint);
、开始侦听客户端连接请求
、等待客户端连接
、客户端与服务器建立连接,得到新的套接字,如clientSocket = m_serverSocket.Accept();
、在套接字上读写数据,直到完成数据交换
、与指定客户端的服务完成后,关闭该客户端的套接字
、关闭服务器,如m_serverSocket.Close();
其中在服务器运行期间,第4到第7步是一个循环的过程,每一个客户端会话进来都走相同的处理模式。
在客户端,也以TCP通信为例,Socket实现网络通信的基本思路是:
、建立流式套接字并返回套接字号,如:m_clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
、将套接字与远程主机(即服务器)进行连接,如:m_serverEndPoint = new IPEndPoint(IPAddress.Parse(serverIP), serverPort);m_clientSocket.Connect(m_serverEndPoint);
、如果连接成功,则开始接收来自服务器端的数据,如: if (m_clientSocket.Connected) { m_clientSocket.BeginReceive(m_receiveBuffer, , m_receiveBuffer.Length, , new AsyncCallback(ReceiveCallBack), null); }
、根据需要,向服务器发送数据,如:m_clientSocket.Send(m_sendBuffer, m_sendBuffer.Length, SocketFlags.None);
、关闭套接字
C#进行Socket通信编程之一的更多相关文章
- 【转】C# Socket通信编程
https://www.cnblogs.com/dotnet261010/p/6211900.html#undefined 一:什么是SOCKET socket的英文原义是“孔”或“插座”.作为进程通 ...
- linux系统socket通信编程实践
简单介绍并实现了基于UDP(TCP)的windows(UNIX下流程基本一致)下的服务端和客户端的程序,本文继续探讨关于UDP编程的一些细节. 下图是一个简单的UDP客户/服务器模型: 我在这里也实现 ...
- linux系统socket通信编程详解函数
linux socket编程之TCP与UDP TCP与UDP区别 TCP---传输控制协议,提供的是面向连接.可靠的字节流服务.当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之 ...
- linux系统UDP的socket通信编程3
我刚开始接触linux下的socket编程,边抄边理解udp socket编程,我的疑问是server不指定IP地址,client的目标IP地址是127.0.0.1,这样就可以通信吗?在同一主机下是不 ...
- linux系统socket通信编程2
一.概述 TCP(传输控制协议)和UDP(用户数据报协议是网络体系结构TCP/IP模型中传输层一层中的两个不同的通信协议. TCP:传输控制协议,一种面向连接的协议,给用户进程提供可靠的全双工的字节流 ...
- linux系统socket通信编程1
Linux下的Socket编程大体上包括Tcp Socket.Udp Socket即Raw Socket这三种,其中TCP和UDP方式的Socket编程用于编写应用层的socket程序,是我们用得比较 ...
- linux系统UDP的socket通信编程2
UDP套接字编程范例: server端代码如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 2 ...
- .NET SOCKET通信编程
1 using System; 2 using System.Net; 3 using System.Net.Sockets; 4 using System.Text; 5 6 public clas ...
- linux系统UDP的socket通信编程
发送方: /* * File: main.c * Author: tianshuai * * Created on 2011年11月29日, 下午10:34 * * 主要实现:发送20个文本消息,然后 ...
随机推荐
- HDU.1596 find the safest road (Floyd)
HDU.1596 find the safest road (Floyd) 题意分析 与普通的最短路不太相同,本题有些许的变化. 1. 要找到由i到j最安全的路,故在求解的时候要保证mp[i][j]尽 ...
- [CQOI2011]放棋子
想到了50%吧算是. f[i][j][k]表示,前i种,占了j行k列.方案数. 发现,转移要处理:“用c个棋子,占据n行m列”的方案数. 设g[i][j][k]表示,i行j列用k个棋子占的方案数.直接 ...
- Poco::URI
#include<iostream> #include<typeinfo> #include<Poco/Path.h> #include <Poco/Dire ...
- STL之七:STL各种容器的使用时机详解
转载于:http://blog.csdn.net/longshengguoji/article/details/8550235 C++标准程序库提供了各具特长的不同容器.现在的问题是:该如何选择最佳的 ...
- Using CORS(译)
原文地址:https://docs.webplatform.org/wiki/tutorials/using_cors 总结 一篇对"Cross Origin Resource Sharin ...
- HDU3666 差分约束
THE MATRIX PROBLEM Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- executeQuery与executeUpdate
executeQuery就是查 executeUpdate是更新,那就是增删改,和新建 吗?
- 精通BIRT:Eclipse商务智能报表工具开发实践指南
http://blog.csdn.net/birtbird/article/details/8935520 [置顶] 精通BIRT:Eclipse商务智能报表工具开发实践指南 分类: BIRT 201 ...
- Ubuntu 15.04 安装配置Apache和mysql的方法
前 言 上篇海面特效的博文结尾提到了SideFX开发的HQueue分布式集群,配置HQueue首先需要安装mysql,所以今天先分享一下如何在Ubuntu系统中安装mysql和Apache: Ubun ...
- szoj657 【AHSDFZNOI 7.2 WuHongxun】Odd
[题目大意] 给出$n$个数$a_1, a_2, ..., a_n$,求有多少个区间$[l, r]$,满足每个数都出现了奇数次. $1 \leq n \leq 2 * 10^5, 0 \leq a_i ...