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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

socket入门教程

發布時間:2025/4/16 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 socket入门教程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Server.cs ? 服務端程序

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Threading; using System.Net; using System.Net.Sockets;namespace SocketTest {public partial class Server : Form{Thread serverThread; //服務端線程Thread clientThread; //客戶端線程Socket serverSocket; //服務端socketSocket clientSocket; //客戶端socketpublic Server(){InitializeComponent();}private void ServerStart(){//創建IPEndPoint實例IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 6001);//創建一個套接字serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//將所創建的套接字與IPEndPoint綁定 serverSocket.Bind(ipep);//設置套接字為收聽模式serverSocket.Listen(10);/*** 通過serverSocket.Accept()來接收客戶Socket的連接請求,* 在這里用循環可以實現該線程實時偵聽,而不是只偵聽一次。* 當程序運行serverSocket.Accept()時,會等待,直到有客戶端Socket發起連接請求時,* 獲取該客戶Socket,如上面的clientSocket。在這里我用多線程來實現與多個客戶端Socket的連接和通信,* 一旦接收到一個連接后,就新建一個線程,執行ReceiveData功能來實現信息的發送和接收。*/while (true){try{//在套接字上接收接入的連接clientSocket = serverSocket.Accept();clientThread = new Thread(new ThreadStart(ReceiveData));clientThread.Start();}catch (Exception ex){MessageBox.Show("listening Error: " + ex.Message);}}}/*** 通過IPEndPoint clientep = (IPEndPoint)s.RemoteEndPoint;* 我們可以獲取連接上的遠程主機的端口和IP地址,如果想查詢該主機的其它屬性如主機名等,* 可用于上一篇講的Dns.GetHostByAddress(string ipAddress)來返回一個IPHostEntry對象,就可以得到。* 另外我們要注意的是,通過Socket發送信息,必須要先把發送的信息轉化成二進字進行傳輸,* 收到信息后也要把收到的二進字信息轉化成字符形式,* 這里可以通過Encoding.ASCII.GetBytes(welcome);和Encoding.ASCII.GetString(buffer).Substring(0, bufLen);來實現。* 以上就是服務端Socket偵聽模式的實現,只要有遠程客戶端Socket連接上后,就可以輕松的發送信息和接收信息了。* 下面我們來看看客戶端Socket是怎么連接上服務器的。**/private void ReceiveData(){bool keepalive = true;Socket s = clientSocket;Byte[] buffer = new Byte[1024];//根據收聽到的客戶端套接字向客戶端發送信息IPEndPoint clientep = (IPEndPoint)s.RemoteEndPoint;this.Invoke(new MethodInvoker(() =>{lstServer.Items.Add("Client:" + clientep.Address + "(" + clientep.Port + ")");}));string welcome = "Welcome to my test sever ";byte[] data = new byte[1024];data = Encoding.ASCII.GetBytes(welcome);s.Send(data, data.Length, SocketFlags.None);while (keepalive){//在套接字上接收客戶端發送的信息int bufLen = 0;try{bufLen = s.Available;s.Receive(buffer, 0, bufLen, SocketFlags.None);if (bufLen == 0)continue;}catch (Exception ex){MessageBox.Show("Receive Error:" + ex.Message);return;}clientep = (IPEndPoint)s.RemoteEndPoint;string clientcommand = System.Text.Encoding.ASCII.GetString(buffer).Substring(0, bufLen);this.Invoke(new MethodInvoker(() =>{lstServer.Items.Add(clientcommand + "(" + clientep.Address + ":" + clientep.Port + ")");}));}}private void btnOpen_Click(object sender, EventArgs e){serverThread = new Thread(new ThreadStart(ServerStart));serverThread.Start();lstServer.Items.Add("Server Start .....");}} }

Client.cs(客戶端程序)

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Net; using System.Net.Sockets; using System.Threading;namespace Client {public partial class Client : Form{Socket clientSocket;Thread clientThread;public Client(){InitializeComponent();}/*** 客戶端Socket連接相對來說比較簡單了,另外說明一下,在執行客戶端連接前,服務端Socket偵聽必須先啟動,* 不然會提示服務器拒絕連接的信息。* 客戶端的發送信息和接收信息跟服務器的接收發送是一樣的,只不過一個是偵聽模式而另一個是連接模式。* 另外提一下,這里服務端開啟偵聽服務、客戶端連接服務端都采用線程方式來實現,這樣服務端能夠跟多個客戶端同時通信,不用等候,* 當然還有另外一種方式可以實現那就是異步socket.*/private void ConnectToServer(){byte[] data = new byte[1024];//創建一個套接字IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 6001);clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//將套接字與遠程服務器地址相連try{clientSocket.Connect(ipep);}catch (SocketException ex){MessageBox.Show("connect error: " + ex.Message);return;}while (true){//接收服務器信息int bufLen = 0;try{bufLen = clientSocket.Available;clientSocket.Receive(data, 0, bufLen, SocketFlags.None);if (bufLen == 0){continue;}}catch (Exception ex){MessageBox.Show("Receive Error:" + ex.Message);return;}string clientcommand = System.Text.Encoding.ASCII.GetString(data).Substring(0, bufLen);this.Invoke(new MethodInvoker(() =>{lstClient.Items.Add(clientcommand);}));//clientSocket.Shutdown(SocketShutdown.Both);//clientSocket.Close(); }}private void button1_Click(object sender, EventArgs e){clientThread = new Thread(new ThreadStart(ConnectToServer));clientThread.Start();}private void btnSend_Click(object sender, EventArgs e){//向服務器發送信息byte[] data = new byte[1024];data = Encoding.ASCII.GetBytes(txtClient.Text);clientSocket.Send(data, data.Length, SocketFlags.None);}} }

?

轉載于:https://www.cnblogs.com/systemnet123/p/3237833.html

總結

以上是生活随笔為你收集整理的socket入门教程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。