日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > C# >内容正文

C#

C#Socket通信

發(fā)布時(shí)間:2023/12/4 C# 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#Socket通信 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

概述

所謂套接字(Socket),就是對(duì)網(wǎng)絡(luò)中不同主機(jī)上的應(yīng)用進(jìn)程之間進(jìn)行雙向通信的端點(diǎn)的抽象。一個(gè)套接字就是網(wǎng)絡(luò)上進(jìn)程通信的一端,提供了應(yīng)用層進(jìn)程利用網(wǎng)絡(luò)協(xié)議交換數(shù)據(jù)的機(jī)制。從所處的地位來講,套接字上聯(lián)應(yīng)用進(jìn)程,下聯(lián)網(wǎng)絡(luò)協(xié)議棧,是應(yīng)用程序通過網(wǎng)絡(luò)協(xié)議進(jìn)行通信的接口,是應(yīng)用程序與網(wǎng)絡(luò)協(xié)議根進(jìn)行交互的接口。

套接字是通信的基石,是支持TCP/IP協(xié)議的路通信的基本操作單元。可以將套接字看作不同主機(jī)間的進(jìn)程進(jìn)行雙間通信的端點(diǎn),它構(gòu)成了單個(gè)主機(jī)內(nèi)及整個(gè)網(wǎng)絡(luò)間的編程界面。套接字存在于通信域中,通信域是為了處理一般的線程通過套接字通信而引進(jìn)的一種抽象概念。套接字通常和同一個(gè)域中的套接字交換數(shù)據(jù)(數(shù)據(jù)交換也可能穿越域的界限,但這時(shí)一定要執(zhí)行某種解釋程序),各種進(jìn)程使用這個(gè)相同的域互相之間用Internet協(xié)議簇來進(jìn)行通信。

Socket(套接字)可以看成是兩個(gè)網(wǎng)絡(luò)應(yīng)用程序進(jìn)行通信時(shí),各自通信連接中的端點(diǎn),這是一個(gè)邏輯上的概念。它是網(wǎng)絡(luò)環(huán)境中進(jìn)程間通信的API(應(yīng)用程序編程接口),也是可以被命名和尋址的通信端點(diǎn),使用中的每一個(gè)套接字都有其類型和一個(gè)與之相連進(jìn)程。通信時(shí)其中一個(gè)網(wǎng)絡(luò)應(yīng)用程序?qū)⒁獋鬏數(shù)囊欢涡畔懭胨谥鳈C(jī)的 Socket中,該 Socket通過與網(wǎng)絡(luò)接口卡(NIC)相連的傳輸介質(zhì)將這段信息送到另外一臺(tái)主機(jī)的 Socket中,使對(duì)方能夠接收到這段信息。Socket是由IP地址和端口結(jié)合的,提供向應(yīng)用層進(jìn)程傳送數(shù)據(jù)包的機(jī)制。

服務(wù)端

using?System; using?System.Collections.Generic; using?System.ComponentModel; using?System.Data; using?System.Drawing; using?System.Linq; using?System.Net; using?System.Net.Sockets; using?System.Text; using?System.Threading; using?System.Windows.Forms;namespace?SocketForm {public?partial?class?Form1?:?Form{public?Form1(){InitializeComponent();}private?void?bt_connnect_Click(object?sender,?EventArgs?e){try{//點(diǎn)擊開始監(jiān)聽時(shí)?在服務(wù)端創(chuàng)建一個(gè)負(fù)責(zé)監(jiān)聽I(yíng)P和端口號(hào)的SocketSocket?socketWatch?=?new?Socket(AddressFamily.InterNetwork,?SocketType.Stream,?ProtocolType.Tcp);IPAddress?ip?=?IPAddress.Any;//創(chuàng)建對(duì)象端口IPEndPoint?point?=?new?IPEndPoint(ip,?Convert.ToInt32(tb_port.Text));socketWatch.Bind(point);//綁定端口號(hào)ShowMsg("監(jiān)聽成功!");socketWatch.Listen(10);//設(shè)置監(jiān)聽//創(chuàng)建監(jiān)聽線程Thread?thread?=?new?Thread(Listen);thread.IsBackground?=?true;thread.Start(socketWatch);}catch?{?}}///?<summary>///?等待客戶端的連接?并且創(chuàng)建與之通信的Socket///?</summary>Socket?socketSend;void?Listen(object?o){try{Socket?socketWatch?=?o?as?Socket;while?(true){socketSend?=?socketWatch.Accept();//等待接收客戶端連接ShowMsg(socketSend.RemoteEndPoint.ToString()?+?":"?+?"連接成功!");//開啟一個(gè)新線程,執(zhí)行接收消息方法Thread?r_thread?=?new?Thread(Received);r_thread.IsBackground?=?true;r_thread.Start(socketSend);}}catch?{?}}///?<summary>///?服務(wù)器端不停的接收客戶端發(fā)來的消息///?</summary>///?<param?name="o"></param>void?Received(object?o){try{Socket?socketSend?=?o?as?Socket;while?(true){//客戶端連接服務(wù)器成功后,服務(wù)器接收客戶端發(fā)送的消息byte[]?buffer?=?new?byte[1024?*?1024?*?3];//實(shí)際接收到的有效字節(jié)數(shù)int?len?=?socketSend.Receive(buffer);if?(len?==?0){break;}string?str?=?Encoding.UTF8.GetString(buffer,?0,?len);ShowMsg(socketSend.RemoteEndPoint?+?":"?+?str);}}catch?{?}}///?<summary>///?服務(wù)器向客戶端發(fā)送消息///?</summary>///?<param?name="str"></param>void?Send(string?str)?{byte[]?buffer?=?Encoding.UTF8.GetBytes(str);socketSend.Send(buffer);}void?ShowMsg(string?msg){listBox1.Items.Add(msg?+?"\r\n");}private?void?Form1_Load(object?sender,?EventArgs?e){Control.CheckForIllegalCrossThreadCalls?=?false;}private?void?bt_send_Click(object?sender,?EventArgs?e){Send(txt_msg.Text.Trim());}} }

客戶端

using?System; using?System.Collections.Generic; using?System.ComponentModel; using?System.Data; using?System.Drawing; using?System.Linq; using?System.Net; using?System.Net.Sockets; using?System.Text; using?System.Threading; using?System.Windows.Forms;namespace?SocketClient {public?partial?class?Form1?:?Form{public?Form1(){InitializeComponent();}Socket?socketSend;private?void?bt_connect_Click(object?sender,?EventArgs?e){try{//創(chuàng)建客戶端Socket,獲得遠(yuǎn)程ip和端口號(hào)socketSend?=?new?Socket(AddressFamily.InterNetwork,?SocketType.Stream,?ProtocolType.Tcp);IPAddress?ip?=?IPAddress.Parse(txt_ip.Text);IPEndPoint?point?=?new?IPEndPoint(ip,?Convert.ToInt32(txt_port.Text));socketSend.Connect(point);ShowMsg("連接成功!");//開啟新的線程,不停的接收服務(wù)器發(fā)來的消息Thread?c_thread?=?new?Thread(Received);c_thread.IsBackground?=?true;c_thread.Start();}catch?(Exception){ShowMsg("IP或者端口號(hào)錯(cuò)誤...");}}void?ShowMsg(string?str){textBox1.AppendText(str?+?"\r\n");}///?<summary>///?接收服務(wù)端返回的消息///?</summary>void?Received(){while?(true){try{byte[]?buffer?=?new?byte[1024?*?1024?*?3];//實(shí)際接收到的有效字節(jié)數(shù)int?len?=?socketSend.Receive(buffer);if?(len?==?0){break;}string?str?=?Encoding.UTF8.GetString(buffer,?0,?len);ShowMsg(socketSend.RemoteEndPoint?+?":"?+?str);}catch?{?}}}///?<summary>///?向服務(wù)器發(fā)送消息///?</summary>///?<param?name="sender"></param>///?<param?name="e"></param>private?void?bt_send_Click(object?sender,?EventArgs?e){try{string?msg?=?txt_msg.Text.Trim();byte[]?buffer?=?new?byte[1024?*?1024?*?3];buffer?=?Encoding.UTF8.GetBytes(msg);socketSend.Send(buffer);}catch?{?}}private?void?Form1_Load(object?sender,?EventArgs?e){Control.CheckForIllegalCrossThreadCalls?=?false;}} }

總結(jié)

以上是生活随笔為你收集整理的C#Socket通信的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。