C# UDP 網路聊天程式
學習了UDP協議的使用以及TCP協議的對比,各有各的優勢!
個人理解優勢區別如下:
1:UDP協議稱為不可靠的傳輸協議,因為在從傳送方到接收方的傳遞過程中出現的資料丟失,協議本身並不能做出任何檢測或者提示。
2:UDP速度比TCP快,因為UDP不需要先與對方建立連線,也不需要連線確認,因此速度要快的多。
理解下使用情景:
並不是說一個程式用UDP就用UDP 用TCP就用TCP,比如說QQ聊天,我們要開視訊,語音,傳送檔案,文字。
其中開視訊,語音就可以用UDP協議去做,文字也可以用UDP協議去做。而傳送檔案就用TCP去做啦,因為傳送檔案比較大的話 中途資料丟失,造成檔案的完整性。。也會導致出問題。。而視訊,線上電影這些就無所謂了,丟一點點也是看不出來的。
-------------------------------------------------分割線---------------------------------------
該程式測試了局域網,外網。
下面也說下連線區域網和外網的方式:
區域網:直接在軟體上指向目標機的內網IP地址即可(如:192.168.1.223)
外網:指向目標機的外網IP地址,並且本機與目標機的路由器務必對映埠8889(可自行在原始碼裡更改)
以下是截圖與完整程式碼:
截圖:
完整程式碼:
引入名稱空間:
using System.Net; using System.Net.Sockets; using System.Threading;
程式碼:
namespace UdpChatExample { public partial class FormChat : Form { /// <summary>接收用</summary> private UdpClient receiveUdpClient; /// <summary>傳送用</summary> private UdpClient sendUdpClient; /// <summary>和本機繫結的埠號</summary> private const int port = 18001; /// <summary>本機IP</summary> IPAddress ip; /// <summary>遠端主機IP</summary> IPAddress remoteIp; public FormChat() { InitializeComponent(); //獲取本機可用IP地址 IPAddress[] ips = Dns.GetHostAddresses(Dns.GetHostName()); ip = ips[ips.Length - 1]; //為了在同一臺機器除錯,此IP也作為預設遠端IP remoteIp = ip; textBoxRemoteIP.Text = remoteIp.ToString(); textBoxSend.Text = "你好!"; } private void FormChat_Load(object sender, EventArgs e) { //建立一個執行緒接收遠端主機發來的資訊 Thread myThread = new Thread(ReceiveData); //將執行緒設為後臺執行 myThread.IsBackground = true; myThread.Start(); textBoxSend.Focus(); } private void ReceiveData() { IPEndPoint local = new IPEndPoint(ip, port); receiveUdpClient = new UdpClient(local); IPEndPoint remote = new IPEndPoint(IPAddress.Any, 0); while (true) { try { //關閉udpClient時此句會產生異常 byte[] receiveBytes = receiveUdpClient.Receive(ref remote); string receiveMessage = Encoding.Unicode.GetString( receiveBytes, 0, receiveBytes.Length); AddItem(listBoxReceive, string.Format("來自{0}:{1}", remote, receiveMessage)); } catch { break; } } } private void buttonSend_Click(object sender, EventArgs e) { Thread t = new Thread(SendMessage); t.IsBackground = true; t.Start(textBoxSend.Text); } /// <summary>傳送資料到遠端主機</summary> private void SendMessage(object obj) { string message = (string)obj; sendUdpClient = new UdpClient(0); byte[] bytes = System.Text.Encoding.Unicode.GetBytes(message); IPEndPoint iep = new IPEndPoint(remoteIp, port); try { sendUdpClient.Send(bytes, bytes.Length, iep); AddItem(listBoxStatus, string.Format("向{0}傳送:{1}", iep, message)); ClearTextBox(); } catch (Exception ex) { AddItem(listBoxStatus, "傳送出錯:" + ex.Message); } } delegate void AddListBoxItemDelegate(ListBox listbox, string text); private void AddItem(ListBox listbox, string text) { if (listbox.InvokeRequired) { AddListBoxItemDelegate d = AddItem; listbox.Invoke(d, new object[] { listbox, text }); } else { listbox.Items.Add(text); listbox.SelectedIndex = listbox.Items.Count - 1; listbox.ClearSelected(); } } delegate void ClearTextBoxDelegate(); private void ClearTextBox() { if (textBoxSend.InvokeRequired) { ClearTextBoxDelegate d = ClearTextBox; textBoxSend.Invoke(d); } else { textBoxSend.Clear(); textBoxSend.Focus(); } } } }
如果編譯有問題的朋友,可以到下面地址下載我上傳的資原始檔,謝謝。
相關推薦
C# UDP 網路聊天程式
學習了UDP協議的使用以及TCP協議的對比,各有各的優勢! 個人理解優勢區別如下: 1:UDP協議稱為不可靠的傳輸協議,因為在從傳送方到接收方的傳遞過程中出現的資料丟失,協議本身並不能做出任何檢測或者提示。 2:UDP速度比TCP快,因為UDP不需要先與對方建立連線,
基於TCP/UDP的網路聊天程式
最近網路結課剛好梳理一下所學的知識。 想要做一個網路聊天的程式,就要先知道需要用到什麼知識和工具。 分享下別人寫的Socket程式設計知識連結 Socket程式設計 基於TCP實現網路聊天1.0(無圖形化介面): 伺服器端Service: /*伺服器端*/ impor
Java UDP通訊聊天程式
編寫兩個新的VC程式,完成以下功能: 一個程式為服務端,建立UDP服務端套接字。 另外一個程式為客戶端,建立UDP客戶端套接字。 這兩個新程式可以互聯,完成一個基於TCP/IP網路的文字聊天程式。 因為TCP需要三次握手,所以只能一來一回的實現聊天程式,而UDP可以只負責
Java之UDP傳輸聊天程式小Demo(多執行緒)
ChatDemo.java import java.net.DatagramSocket; public class ChatDemo { public static void main(String[] args) { try {
boost asio非同步讀寫網路聊天程式客戶端 例項詳解
// // chat_server.cpp // ~~~~~~~~~~~~~~~ // // Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // Distributed under the Boos
VS2010編寫UDP網路通訊程式的問題(借用孫鑫老師《深入VC++》書中程式)
一開始安照老師書上寫的程式敲上去後,按照先伺服器端後客戶端的編譯順序,編譯結果總是“燙燙燙”,網上查找了“燙燙燙”的原因,因為在這本書上面有個不好的程式設計習慣,他沒有把陣列初始化,所以每次輸出的是不確定值“燙燙燙”。然後除錯的過程中 發現是函式recvfrom函式的問題
基於多程序的網路聊天程式
參考:linux高效能伺服器程式設計,作者:遊雙 程式簡介:該程式用了共享記憶體來實現程序間的同步,由於只是同時讀取共享記憶體,所以沒有用到鎖。該程式的功能是伺服器監聽網路連線,當有一個客戶端連線時,伺服器建立一個子程序處理該連線。每個子程序只負責自己的客戶端以及和父程序通
網路程式設計套接字、網路位元組序及用udp寫客戶端和服務端聊天程式
認識IP地址 IP協議有兩個版本:IPV4和IPV6。 IPV4:IPV4版本的IP地址是4位元組無符號整數。那麼就存在IP地址資源匱乏的時候,這時可以採用兩種方法: DHCP:ip地址動態分配(應用層協議); NAT: 地址替換; 但是這兩種方法只是暫時的有I
linux c 基於UDP的多人聊天程式
client.c #include<stdio.h> #include<stdlib.h> #include<string.h> #include<errno.h> #include<sys/types.h> #
網路程式設計與多執行緒的應用--基於socket udp編寫一個簡單聊天程式
void CChatDlg::OnBnClickedButtonSend() {// TODO: Add your control notification handler code here//獲取對方IPCIPAddressCtrl* pIPAddress = ((CIPAddressCtrl*)GetD
windows網絡編程-C語言實現簡單的UDP協議聊天
無連接 ipv4地址 ast 電腦 tdi data rcp proto 生生 與TCP協議下編寫服務端程序代碼類似,但因為是無連接的形式,所以不需要監聽。 這次,我用了一點不同的想法:我建立一個服務端,用了兩個端口和兩個套接字,把服務端作為一個數據轉發的中轉站,
JAVA——基於UDP協議的文字聊天程式
基於UDP協議的文字聊天程式 1.要求 使用JAVA完成一個基於TCP協議的文字聊天程式,建立TCP客戶端套接字,分別為服務端和客戶端,並使兩端可以互聯。 2.UDP協議 在UDP協議中,沒有TCP中所謂的伺服器端和客戶端,而是有資料的傳送端和接收端。也就是說UDP
udp網路程式-埠問題
會變的埠號 重新執行多次指令碼,然後在“網路除錯助手”中,看到的現象如下: 說明: 1)每重新執行一次網路程式,上圖中紅圈中的數字,不一樣的原因在於,這個數字標識這個網路程式,當重新執行時,如果沒有確定到底用哪個,系統預設會隨機分配 2)記住一點:這個網路程式在執行的過程中
udp網路程式-傳送資料
創一個udp客戶端程式的流程是簡單,具體步驟如下: 1. 建立客戶端套接字 2. 傳送/接收資料 3. 關閉套接字 程式碼如下: #coding=utf-8 from socket import * #1. 建立套接字 udpSocket = socket(AF_INE
python網路程式設計之udp的聊天室
import socket def main(): #建立套接字 udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) udp_socket.bind(("192.168.227.129",7567
Python C/S 網路程式設計(一)之 三種方法實現天氣預報小程式
1. 首先明白下協議棧和庫的概念: 協議棧(Protocol Stack): 是指網路中各層協議的總和,其形象的反映了一個網路中檔案傳輸的過程:由上層協議到底層協議,再由底層協議到上層協議。 庫(Library):主要用來解析要使用的網路通訊協議,包含Python內建標準庫
C++開發的UDP網路通訊工具類(相容window和linux)
前段時間做專案用到了網路通訊,自己造了UDP通訊的輪子,能同時在window和linux下執行,並且封裝成類,方便以後使用,考慮到自己也一直在網際網路上獲取資源,現在也把我做的輪子也分享給大家,歡迎參考~ 完整程式碼附在下面,如果大家不想複製,可直接從這下載:https://download
[原始碼和文件分享]基於java語言的C/S模式網路聊天室軟體
一 需求分析 採用C/S模式,基於TCP協議程式設計的方式,使得各個使用者通過伺服器轉發實現聊天的功能 分為三大模組:客戶端模組、伺服器端模組和公共輔助類模組 客戶端模組的主要功能: 登陸功能:使用者可以註冊,然後選擇伺服器登入聊天室
Linux中用socket實現UDP網路程式
這篇部落格的目的是想實現一個簡單的UDP伺服器程式,完成客戶端與伺服器端的通訊。 因為涉及的小知識點比較多,所以本篇部落格的篇幅較長,但是會講的很詳細。 在下一篇部落格裡,我會總結Linux中用socket實現TCP網路程式 1.程式的第一步是建立套接字(so
JAVA——基於TCP/IP網路的文字聊天程式
基於TCP/IP網路的文字聊天程式 1.要求 使用JAVA完成一個基於TCP/IP網路的文字聊天程式,建立TCP客戶端套接字,分別為服務端和客戶端,並使兩端可以互聯。 2.TCP協議 在TCP協議中,有伺服器端(Server端)和客戶端(Client端)的概念