C# socket编程第二篇
生活随笔
收集整理的這篇文章主要介紹了
C# socket编程第二篇
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?? ? 既然有了方向,確定了方案就要一步一步的執行方案。socket+udp通信要考慮的問題很多,比如大文件傳輸的時候如何分包,如何校驗,如何判斷是否丟包,丟包后從發,如何保證文件的完整性等等一系列問題。
?? ? ?在考慮這些問題的最開始,我們要解決的實現SOCKET通信,如果通信都不能實現,又談何程序的完整性。這貼一個socket+Udp的demo。新建兩個控制臺應用程序,一個是服務端,一個是客戶端。模擬客服端和服務端通信
服務端 using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;
namespace Bose.XueLeCN.COM.FileReceiveControl
{
class Program
{
static void Main(string[] args)
{
int recv;
byte[] data = new byte[1024];
//構建TCP 服務器
//得到本機IP,設置TCP端口號
IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 8001);
Socket newsock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
//綁定網絡地址
newsock.Bind(ipep);
Console.WriteLine("This is a Server, host name is {0}", Dns.GetHostName());
//等待客戶機連接
Console.WriteLine("Waiting for a client");
//得到客戶機IP
IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
EndPoint Remote = (EndPoint)(sender);
recv = newsock.ReceiveFrom(data, ref Remote);
Console.WriteLine("Message received from {0}: ", Remote.ToString());
Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv));
//客戶機連接成功后,發送歡迎信息
string welcome = "Welcome ! ";
//字符串與字節數組相互轉換
data = Encoding.ASCII.GetBytes(welcome);
//發送信息
newsock.SendTo(data, data.Length, SocketFlags.None, Remote);
while (true)
{
data = new byte[1024];
//發送接受信息
recv = newsock.ReceiveFrom(data, ref Remote);
Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv));
newsock.SendTo(data, recv, SocketFlags.None, Remote);
}
}
}
} 客戶端 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
namespace FileDistributeControl
{
class Program
{
static void Main(string[] args)
{
byte[] data = new byte[1024];
string input, stringData;
//構建TCP 服務器
Console.WriteLine("This is a Client, host name is {0}", Dns.GetHostName());
//設置服務IP,設置TCP端口號
IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8001);
//定義網絡類型,數據連接類型和網絡協議UDP
Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
string welcome = "Hello! ";
data = Encoding.ASCII.GetBytes(welcome);
server.SendTo(data, data.Length, SocketFlags.None, ipep);
IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
EndPoint Remote = (EndPoint)sender;
data = new byte[1024];
//對于不存在的IP地址,加入此行代碼后,可以在指定時間內解除阻塞模式限制
//server.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 100);
int recv = server.ReceiveFrom(data, ref Remote);
Console.WriteLine("Message received from {0}: ", Remote.ToString());
Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv));
while (true)
{
input = Console.ReadLine();
if (input == "exit")
break;
server.SendTo(Encoding.ASCII.GetBytes(input), Remote);
data = new byte[1024];
recv = server.ReceiveFrom(data, ref Remote);
stringData = Encoding.ASCII.GetString(data, 0, recv);
Console.WriteLine(stringData);
}
Console.WriteLine("Stopping Client.");
server.Close();
}
}
} 先運行服務端,再運行客戶端,否則會報錯。通信實現了,下面我們要做的就是在這基礎上完善我們的程序,我們的最終目的是用socket來傳輸文件。
轉載于:https://www.cnblogs.com/_fyz/archive/2011/05/05/2037794.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的C# socket编程第二篇的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Javascript中的对象查找【转】
- 下一篇: Android开发之系统信息——获取An