網站首頁 編程語言 正文
【1】引用命名空間:
//System.Net.Sockets
using System.Net.Sockets; // 以太網對象
?
// 字段位置
private Socket socket業務; ?//對象既可以當服務器,又可以當客戶端
TcpListener tcpListener; ? //服務器對象
TcpClient tcpClient; ? ? ? //客戶端對象
?Socket 構造函數:
public Socket(SocketInformation 套接字結構體);
public Socket(SocketType 插座類型, ProtocolType 協議類型);
public Socket(AddressFamily 工作組, SocketType 插座類型, ProtocolType 協議類型);
參數介紹:
AddressFamily.InterNetwork=2 用 IPv4
public enum AddressFamily
{
Unknown = -1, //未知的地址族。
Unspecified = 0, //未指定的地址族。
Unix = 1, //Unix 本地到主機地址。
InterNetwork = 2, //IP 版本 4 的地址。
ImpLink = 3, //ARPANET IMP 地址。
Pup = 4, //PUP 協議的地址。
Chaos = 5, //MIT CHAOS 協議的地址。
NS = 6, //IPX 或 SPX 地址。
Ipx = 6, //Xerox NS 協議的地址。
Iso = 7, //ISO 協議的地址。
Osi = 7, //OSI 協議的地址。
Ecma = 8, //歐洲計算機制造商協會 (ECMA) 地址。
DataKit = 9, //Datakit 協議的地址。
Ccitt = 10, //CCITT 協議(如 X.25)的地址。
Sna = 11, //IBM SNA 地址。
DecNet = 12, //DECnet 地址。
DataLink = 13, //直接數據鏈接接口地址。
Lat = 14, //LAT 地址。
HyperChannel = 0xF, //NSC Hyperchannel 地址。
AppleTalk = 0x10, //AppleTalk 地址。蘋果
NetBios = 17, //NetBios 地址。
VoiceView = 18, //VoiceView 地址。
FireFox = 19, //FireFox 地址。
Banyan = 21, //Banyan 地址。
Atm = 22, //本機 ATM 服務地址。
InterNetworkV6 = 23,//IP 版本 6 的地址。
Cluster = 24, //Microsoft 群集產品的地址。
Ieee12844 = 25, //IEEE 1284.4 工作組地址。
Irda = 26, //IrDA 地址。
NetworkDesigners = 28,//支持網絡設計器 OSI 網關的協議的地址。
Max = 29 //MAX 地址。
}
?SocketType.Stream
public enum SocketType
{
Stream = 1,// Tcp InterNetwork 地址族 //支持可靠、雙向
Dgram = 2, // Udp InterNetwork 地址族。
Raw = 3,
Rdm = 4,
Seqpacket = 5,
Unknown = -1//指定未知的 Socket 類型。
}
ProtocolType.Tcp
public enum ProtocolType
{
IP = 0,
IPv6HopByHopOptions = 0,
Icmp = 1,
Igmp = 2,
Ggp = 3,
IPv4 = 4,
Tcp = 6,
Pup = 12,
Udp = 17,
Idp = 22,
IPv6 = 41,
IPv6RoutingHeader = 43,
IPv6FragmentHeader = 44,
IPSecEncapsulatingSecurityPayload = 50,
IPSecAuthenticationHeader = 51,
IcmpV6 = 58,
IPv6NoNextHeader = 59,
IPv6DestinationOptions = 60,
ND = 77,
Raw = 0xFF,
Unspecified = 0,
Ipx = 1000,
Spx = 1256,
SpxII = 1257,
Unknown = -1
}
【2】字段: 聲明對象
//聲明一個Socket對象
private Socket socketSever服務器; // 【1】Socket
// 工作組,套接字類型,協議類型
socketSever服務器 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
【3】初始化:參數
//設置 服務器ip
IPEndPoint ipe = new IPEndPoint(IPAddress.Parse("192.168.0.7"), int.Parse(12345));
try
{
socketSever服務器.Bind(ipe);// 【2】Bind 綁定本地ip
}
catch (Exception ex)
{
//寫入日志
MessageBox.Show("服務器開啟失敗:"+ex.Message);
return;
}
// 調用listen()函數監聽,業務窗口(同時辦理業務窗口數)// 同時占線數量
socketSever服務器.Listen(10);// 【3】Listen
Task.Run(new Action(() => //開線程,使主線程能退到ui層
{
客戶登錄業務(); // 【4】Accpet
}));
按鈕_啟動服務.Enabled = false;
private void 客戶登錄業務()
{
while (true)
{
//等待客戶
Socket socketClient客戶 = socketSever服務器.Accept();// 【4】Accpet
//客戶來了
string client客戶IP地址 = socketClient客戶.RemoteEndPoint.ToString();
客戶電話簿.Add(client客戶IP地址, socketClient客戶);
占線刷新(client客戶IP地址, true);
Task.Run(new Action(() => //第2隊線程
{
Receive客戶經理(socketClient客戶);
}));
}
}
private void Receive客戶經理(Socket socketClient)
{
while (true)
{
// 創建一個緩沖區
byte[] buffer = new byte[1024 * 1024 * 10];
int length = -1;
// 客戶ip
string client = socketClient.RemoteEndPoint.ToString();
// 等待客戶發言
try
{
length = socketClient.Receive(buffer);
}
catch (Exception)
{
// 下線了
占線刷新(client, false);
客戶電話簿.Remove(client);
break;
}
if (length > 0)
{// 委托呼叫
wt(client,Encoding.UFT8.GetString(buffer,0,length));
}
else
{
// 下線了
占線刷新(client, false);
客戶電話簿.Remove(client);
break;
}
}
}
使用以太網
注意:對象不包含0個參數
原文鏈接:https://blog.csdn.net/cfqq1989/article/details/121724912
相關推薦
- 2022-10-24 Winform控件優化之圓角按鈕2_C#教程
- 2022-04-24 C語言浮點函數中的modf和fmod詳解_C 語言
- 2022-05-29 利用Python將list列表寫入文件并讀取的方法匯總_python
- 2022-08-19 MapReduce讀取定長文件入庫Hive表Orc格式
- 2022-12-31 C++?Boost?Uuid超詳細講解_C 語言
- 2022-06-18 C語言深入講解宏的定義與使用方法_C 語言
- 2022-08-12 Android學習之BottomSheetDialog組件的使用_Android
- 2024-03-21 SpringBoot +MyBatis批量插入數據
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支