介绍

  1、TCP/IP(Transmission Control Protocol/Internet Protocol) 即传输控制协议/网间协议,是一个工业标准的协议集,它是为广域网(WANs)设计的。

  2、UDP(User Data Protocol,用户数据包协议)是与TCP相对应的协议。它属于TCP/IP协议族中的一种。

  3、应用层(Application):应用层是一个很广泛的概念,有一些基本相同的系统级TCP/IP应用以及应用协议,也有许多的企业商业应用和互联网应用。

  4、传输层(Transport):传输层包括UDP和TCP,UDP几乎不对报文进行检查,而TCP提供传输保证。

  5、网络层(NetWork):网络层协议由一系列协议组成,包括ICMP、IGMP、RIP、OSPF、IP(v4、v6)等。

  6、链路层(Link):又称为物理数据网络接口层,负责报文传输。

网络4层协议

原理图

端口的分类

  1、公认端口(Well Known Ports):从0到1023,它们紧密绑定(binding)于一些服务。通常这些端口的通讯,明确了某种服务的协议。例如:80端口实际上总是HTTP通讯。

  2、注册端口(Registered Ports):从1024到49151。它们松散地绑定于一些服务。也就是说许多服务绑定于这些端口,这些端口同样用于许多其他目的。例如:许多系统处理动态端口从1024左右开始。

  3、动态和私有端口(Dynamic and/or Private Ports):从49152到65535。理论上,不应为服务分配这些端口。实际上,机器通常从1024起分配动态端口,但也有例外:SUN的RPC端口从32768开始。

服务端界面

 using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Net;
using System.Threading; namespace socket网络编程
{
public partial class frmServer : Form
{
public frmServer()
{
InitializeComponent();
Control.CheckForIllegalCrossThreadCalls = false;
} private void BtnStart_Click(object sender, EventArgs e)
{
try
{
//Socket服务器端
//引入命名空间:using System.Net;
//引入命名空间:using System.Net.Sockets;
//1、创建Socket
Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //第一个参数:设置网络寻址协议;第二个参数:设置数据传输方式;第三个参数:设置通信协议
//2、绑定IP和端口
this.txtLog.Text = "创建服务端Socket对象\r\n"+this.txtLog.Text;
IPAddress ip = IPAddress.Parse(txtIp.Text.Trim()); //IP地址
int port = Convert.ToInt32(txtPort.Text.Trim()); //端口
IPEndPoint ipEndpoint = new IPEndPoint(ip, port);
serverSocket.Bind(ipEndpoint);
//3、开启侦听
serverSocket.Listen(); //挂起连接队列的最大长度。
//4、开始接收客户端连接
this.txtLog.Text = "开启接受客户端连接\r\n" + this.txtLog.Text;
ThreadPool.QueueUserWorkItem(new WaitCallback(this.StartAcceptClient), serverSocket);
}
catch (Exception ex)
{
throw ex;
}
}
List<Socket> ClientProxSocket = new List<Socket>();
public void StartAcceptClient(object state)
{
try
{
var serverSocket = (Socket)state;
while (true)
{
Socket proxSocket = serverSocket.Accept(); //为新建连接创建新的Socket对象
this.txtLog.Text = string.Format("客户端:{0}已连接\r\n{1}", proxSocket.RemoteEndPoint.ToString(), this.txtLog.Text); //proxSocket.RemoteEndPoint:获取连接信息
ClientProxSocket.Add(proxSocket);
//服务端接受客户端的消息
ThreadPool.QueueUserWorkItem(new WaitCallback(RecieveData),proxSocket);
//string str = DateTime.Now.ToString();
//byte[] data = Encoding.UTF8.GetBytes(str); //待发送字节数组
//proxSocket.Send(data, 0, data.Length, SocketFlags.None); //发送消息,发送的消息必须大于0个字节
//proxSocket.Shutdown(SocketShutdown.Both);
//this.txtLog.Text = "关闭\r\n" + this.txtLog.Text;
//proxSocket.Close(); //关闭
}
}
catch (Exception ex)
{
throw ex;
}
}
public void RecieveData(object obj)
{
var proxSocket = (Socket)obj;
byte[] data = new byte[ * ];
//方法返回值,实际接受的数据的长度(字节数)
while (true)
{
try //处理客户端异常退出
{
int reallen = proxSocket.Receive(data, , data.Length, SocketFlags.None);
if (reallen == )
{
this.txtLog.Text = string.Format("客户端:{0}退出\r\n{1}", proxSocket.RemoteEndPoint.ToString(), this.txtLog.Text);
//客户端退出
proxSocket.Shutdown(SocketShutdown.Both);
proxSocket.Close();
ClientProxSocket.Remove(proxSocket);
return;
}
string formClientMsg = Encoding.UTF8.GetString(data, , reallen);
this.txtLog.Text = string.Format("接受客户端{0}的消息:{1}\r\n{2}", proxSocket.RemoteEndPoint.ToString(), formClientMsg, this.txtLog.Text);
}
catch (Exception ex)
{ }
}
}
private void BtnSend_Click(object sender, EventArgs e)
{
try
{
foreach (var socket in ClientProxSocket)
{
if (socket.Connected)
{
string str = this.txtMsg.Text.Trim();
byte[] data = Encoding.UTF8.GetBytes(str);
socket.Send(data, , data.Length, SocketFlags.None);
}
}
}
catch (Exception ex)
{
throw ex;
}
}
}
}

C# Stocket的更多相关文章

  1. java-通讯stocket插件mina实例

    mina是对nio的具体实现.是目前比较高效和流行的nio(非阻塞式I/O)框架 mina主要包括: 其中服务端为:NioSocketAcceptor 客户端为:NioSocketConnector ...

  2. 走进netty

    三月份开始看公司RPC框架的源码,发现如果要折腾明白,网络通讯这块知识必不可少.于是从如下几点开始逐步研究. 一.基础知识篇 1.Unix下5种I/O模型 Linux的内核将所有外部设备都看作一个文件 ...

  3. Nginx-rtmp 直播媒体实时流实现

    0. 前言 这段时间在搭建一个IPCamera项目服务器.视频点对点通话,客户端会查看设备端的音视频实时流.为了省流量,是通过P2P进行穿透.但是由于NAT设备的原因和IPV4的枯竭.有些设备是无法进 ...

  4. Linux应用程序设计之网络基础编程

    1.TCP/IP协议概述 1.1.OSI参考模型及TCP/IP参考模型 OSI协议参考模型是基于国际标准化组织(ISO)的建议发展起来的,从上到下工分为7层:应用层,表示层,会话层,传输层,网络层,数 ...

  5. SCWS中文分词PHP扩展详细安装说明

    因最近写的一段代码,需要用到中文分词,在网上找了一下,发现了scws这个不错的插件,故根据文档安装使用,下面记录下安装的全过程 系统:centos 安装scws wget http://www.xun ...

  6. CPU占用高系统反应慢之问题定位

    今天在看到公司群里有关于测试反应测试服务器比较卡,调用调用超时,响应很慢,成功率低的问题,然后想着去处理这个问题. 本着开发的精神,摒弃网管的水平,寻找问题的根源. 主要从如下几个方面入手: 1:查询 ...

  7. django 本地项目部署uwsgi 以及云服务器部署 uwsgi+Nginx+Docker+MySQL主从

    一 .django 本地项目部署uwsgi 1 本地部署项目 uwsgi安装测试 通过uwsgi 进行简单部署 安装uwsgi命令:pip install uwsgi -i http://pypi.d ...

随机推荐

  1. FormData使用方法详解,以及在IE9环境下,前端的文件上传问题

    FormData的主要用途有两个: 1.将form表单元素的name与value进行组合,实现表单数据的序列化,从而减少表单元素的拼接,提高工作效率. 2.异步上传文件 一.创建formData对象 ...

  2. 周会材料:高并发程序设计<二>

    第三章 JDK并发包https://www.cnblogs.com/sean-zeng/p/11957569.html JDK内部提供了大量实用的API和框架.本章主要介绍这些JDK内部功能,主要分为 ...

  3. 常用类-CSV---OLEDB

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...

  4. Thymeleaf常用语法:HTML属性设置

    使用Thymeleaf的属性来设置HTML属性.(1)使用th:attr属性可以修改原来HTML节点的属性:(2)th:attr属性可以同时设置多个属性:(3)每一个HTML属性都有对应的Thymel ...

  5. 微信退款异步通知报错Illegal key size or default parameters 的解决办法

    问题原因: Java几乎各种常用加密算法都能找到对应的实现.因为美国的出口限制,Sun通过权限文件(local_policy.jar.US_export_policy.jar)做了相应限制.因此存在一 ...

  6. linux学习(八)Shell中变量的数学运算

    目录 常见的运算符 expr命令 @(Shell中变量的数学运算) 常见的运算符 环境变量 说明 + 加 - 减 * 乘 / 除 % 取模 因为Shell中将*作为通配符使用, expr命令 expr ...

  7. Fiddler应用——Fiddler过滤功能

    Fiddler的过滤功能在Fiddler右面板处,点击Filters显示如图所示面板. 如图所示,Fiddler的过滤面板主要分为几个部分: 1.Use Filters:是否启用过滤器 2.Actio ...

  8. JVM 类的加载机制

    在对类的实例化之前.JVM 一般会先进行初始化 主要经过如下几个阶段: 1.加载                       类加载的第一阶段,类加载时机有两个: 1.预加载:当虚拟机启动时,会预加载 ...

  9. React 语法基础(一)之表达式和jsx

    react负责逻辑控制 reactdom负责渲染 本节知识点 有 1)变量的使用,简单使用. 1==>jsx中的注释 {/* */} 2===> 简单的渲染 app.js ps==> ...

  10. 201871010112-梁丽珍《面向对象程序设计(java)》第十三周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...