(45)C#网络3 socket
一、TCP传输
using System.Net.Sockets;
1.最基本客户端连服务器
服务端运行后一直处于监听状态,客户端每启动一次服务端就接收一次连接并打印客户端的ip地址和端口号。(服务端的端口号是固定的,客户端端口号是随机生成的)
服务端
static void Main(string[] args)
{
Int32 port = ;
IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
//创建监听对象,参数1:IPAddress类的对象,参数2:端口号
TcpListener tcpListener = new TcpListener(ipAddress, port);
//开启监听
tcpListener.Start();
Console.WriteLine("服务器端口号:" + port + " 开始监听...");
while (true)
{
//接收一个tcp类型的客户端连接
TcpClient tcpClient = tcpListener.AcceptTcpClient();
//屏幕打印客户端的IP地址和端口号
Console.WriteLine("客户端:{0},连接到服务端", tcpClient.Client.RemoteEndPoint);
}
}
客户端
static void Main(string[] args)
{
Console.WriteLine("启动客户端 ...");
TcpClient client = new TcpClient();
try
{
// 与服务器连接
client.Connect("localhost", );
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return;
}
Console.ReadKey();
}
2.服务端与客户端聊天
二、UDP传输
UDP是无连接协议,不需要用listener监听。
UDP传输是对等的没有主次之分
IPEndPoint 类
将网络终结点表示为 IP 地址和端口号
//新实例初始化 IPEndPoint 类具有指定的地址和端号,IPEndPoint(IPAddress, Int32)
IPEndPoint iPEndPoint = new IPEndPoint(IPAddress.Any, );
//获取或设置IP地址
iPEndPoint.Address
//获取或设置端口号
iPEndPoint.Port
三、Socket
构造函数:
Socket(AddressFamily, SocketType, ProtocolType)
AddressFamily 表示地址族 Socket,一般使用InterNetwork 表示ipv4

SocketType:指定套接字类型的实例 Socket 类表示

ProtocolType: 指定 Socket 类支持的协议

属性
Blocking:是否 Socket 处于阻塞模式。bool
Connected:获取一个值,该值指示是否 Socket 连接到远程主机从上次以来 Send 或 Receive 操作。bool
LocalEndPoint:表示本地ip与端口的组合,在调用bind后设置
RemoteEndPoint:面向连接中,该属性可以获取socket连接中的远程IP和端口,无连接中该属性包含将要和socket通信的默认远程ip和端口,RemoteEndPoint在调用acceppt或conncet后使用。

服务端
class Program
{
static Socket S;
static void Main(string[] args)
{
Console.WriteLine("启动服务器.....");
//参数1寻址方案,参数2套接字类型,参数3协议类型
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//设置IP地址和端口号
IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), );
//把地址绑定到socket对象
socket.Bind(ipEndPoint);
//启动监听,并设置连接队列的最大长度
socket.Listen();
try
{
//持续监听
while (true)
{
//等待客户端连接,连接后接收客户端返回一个通信用的socket对象
S = socket.Accept();
Console.WriteLine("客户端 " + S.RemoteEndPoint + " 连接到服务器.....");
Thread th = new Thread(receive);
th.Start(S);
}
}
catch { }
}
static void receive(object o)
{
while (true)
{
try
{
byte[] buffer = new byte[ * * ];
//接收客户端消息读到缓冲区(字节数组类型),返回int字节数
int count = S.Receive(buffer);
//防止客户端关闭后进入死循环
if (count == )
{
break;
}
//将字节数组转成字符串
string str = Encoding.UTF8.GetString(buffer, , count);
Console.WriteLine("客户端" + str);
}
catch { }
}
}
static void write()
{ }
}
客户端
class Program
{
static void Main(string[] args)
{
string str = string.Empty;
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//连接指定的服务器
socket.Connect("127.0.0.1",);
Console.WriteLine("连接成功");
while (!str.Equals("exit"))
{
str = Console.ReadLine();
byte[] buffer = Encoding.UTF8.GetBytes(str);
socket.Send(buffer);
}
Console.ReadKey();
}
}
(45)C#网络3 socket的更多相关文章
- 网络编程socket基本API详解(转)
网络编程socket基本API详解 socket socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信. socket ...
- Android 网络编程 Socket
1.服务端开发 创建一个Java程序 public class MyServer { // 定义保存所有的Socket,与客户端建立连接得到一个Socket public static List< ...
- 网络编程Socket之TCP之close/shutdown具体解释(续)
接着上一篇网络编程Socket之TCP之close/shutdown具体解释 如今我们看看对于不同情况的close的返回情况和可能遇到的一些问题: 1.默认操作的close 说明:我们已经知道writ ...
- 铁乐学Python_Day33_网络编程Socket模块1
铁乐学Python_Day33_网络编程Socket模块1 部份内容摘自授课老师的博客http://www.cnblogs.com/Eva-J/ 理解socket Socket是应用层与TCP/IP协 ...
- Python网络编程socket
网络编程之socket 看到本篇文章的题目是不是很疑惑,what is this?,不要着急,但是记住一说网络编程,你就想socket,socket是实现网络编程的工具,那么什么是socket,什么是 ...
- java网络编程socket\server\TCP笔记(转)
java网络编程socket\server\TCP笔记(转) 2012-12-14 08:30:04| 分类: Socket | 标签:java |举报|字号 订阅 1 TCP的开销 a ...
- linux网络编程-socket(37)
在编程的时候需要加上对应pthread开头的头文件,gcc编译的时候需要加了-lpthread选项 第三个参数是线程的入口参数,函数的参数是void*,返回值是void*,第四个参数传递给线程函数的参 ...
- 网络编程socket 结合IO多路复用select; epool机制分别实现单线程并发TCP服务器
select版-TCP服务器 1. select 原理 在多路复用的模型中,比较常用的有select模型和epoll模型.这两个都是系统接口,由操作系统提供.当然,Python的select模块进行了 ...
- Python进阶开发之网络编程,socket实现在线聊天机器人
系列文章 √第一章 元类编程,已完成 ; √第二章 网络编程,已完成 ; 本文目录 什么是socket?创建socket客户端创建socket服务端socket工作流程图解socket公共函数汇总实战 ...
随机推荐
- Spring框架针对dao层的jdbcTemplate操作crud之query查询数据操作
查询目标是完成3个功能: (1)查询表,返回某一个值.例如查询表中记录的条数,返回一个int类型数据 (2)查询表,返回结果为某一个对象. (3)查询表,返回结果为某一个泛型的list集合. 一.查询 ...
- 学习C语言库函数
使用C语言功能强大的函数,我们需要包含头文件 #include<math.h>. 1)取两个数的较大值或较小值函数: double a = 9.9; double b = 6.6; pri ...
- MySql的基操勿六
2018/12/6 星期四 19:34:07 authot by dabaine 数据库注释; -- 这就是注释 /*.....*/ 这也是注释 创建库; create databse [if not ...
- MySQL Group Replication(组复制MGR)
MGR基本要求: 1.InnoDB存储引擎 2.主键,每个表必须具有已定义的主键或等效的主键,其中等效项是非null唯一键 3.IPv4网络 4.网络性能 5.开启二进制日志并开启GTID模式 6.m ...
- css3的border-radius属性使用方法
1.border-radius可以包含两个参数值,第一个水平圆角半径,第二个为垂直半径,并且两个参数值用“/”分开. 2.border-radius:设置一个值为四个角都相同,两个值为左上和右下相同, ...
- node.js----服务器http
请求网址过程: 1.用户通过浏览器发送一个http的请求到指定的主机 2.服务器接收到该请求,对该请求进行分析和处理 3.服务器处理完成以后,返回对应的数据到用户机器 4.浏览器接收服务器返回的数据, ...
- Python_编程题集_001_词法解析
1.词法解析: 我的是名字是ths,今年18岁 语法分析后得到结果如下: 数字:18 中文:我的名字是 今年 岁 拼音:ths 符号:,. 请编写程序实现该词法分析功能 string模块解: impo ...
- pycharm添加wordcloud模块时报错:error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools": http://landinghub.visualstudio.com/visual-cpp-build-tools
windows 7 32bit python3.6.3 32bit pycharm2018社区版 32bit 问题说明: 添加wordcloud模块时报错:error: Microsoft Visua ...
- The North American Invitational Programming Contest 2018 H. Recovery
Consider an n \times mn×m matrix of ones and zeros. For example, this 4 \times 44×4: \displaystyle \ ...
- PAT Basic 1065
1065 单身狗 “单身狗”是中文对于单身人士的一种爱称.本题请你从上万人的大型派对中找出落单的客人,以便给予特殊关爱. 输入格式: 输入第一行给出一个正整数 N(≤ 50 000),是已知夫妻/伴侣 ...