1、C#完整的通信代码点对点点对多同步异步UDPTCPC#完整的通信代码(点对点,点对多,同步,异步,UDP,TCP).txt我这人从不记仇,一般有仇当场我就报了。没什么事不要找我,有事更不用找我!就算是believe中间也藏了一个lie!我那么喜欢你,你喜欢我一下会死啊?我又不是人民币,怎么能让人人都喜欢我?C# code namespace UDPServer class Program static void Main(string args) int recv; byte data = new byte1024; /构建TCP 服务器 /得到本机IP,设置TCP端口号 IPEndPoint
2、 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 IP
3、EndPoint 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 =
4、 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); newsoc
5、k .SendTo (data ,recv ,SocketFlags .None ,Remote ); C# codeusing System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Net;using System.Net.Sockets;namespace UDPClient class Program static void Main(string args) byte data = new byte1024; string input ,stringData; /
6、构建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 =
7、 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 byte1024; int recv = server.ReceiveFrom(data, ref Remote); Console.WriteLine(Message recei
8、ved 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
9、= Encoding.ASCII.GetString(data, 0, recv); Console.WriteLine(stringData); Console .WriteLine (Stopping Client.); server .Close (); C# codeTCPClientTCPClient 类提供了一种使用 TCP 协议连接到某个端点的简化方法。它还通过 NetworkStream 对象展现在连接过程中读取或写入的数据。请参见下面从 QuickStart 文档中摘录的日期/时间客户机示例。使用 C# 编写using System;using System.Net;usin
10、g System.Net.Sockets;using System.IO;using System.Text;class Clientpublic static void Main(String args)TCPClient tcpc = new TCPClient();Byte read = new Byte32;if (args.Length != 1)Console.WriteLine(“请在命令行中指定服务器名称”);return;String server = args0;/ 验证服务器是否存在if (DNS.GetHostByName(server) = null)Console.
11、WriteLine(“找不到服务器:” + 服务器);return;/ 尝试连接到服务器if (tcpc.Connect(server, 13) = -1)Console.WriteLine(“无法连接到服务器:” + 服务器);return;/ 获取流Stream s = tcpc.GetStream();/ 读取流并将它转换为 ASCII 码形式int bytes = s.Read(read, 0, read.Length);String Time = Encoding.ASCII.GetString(read);/ 显示数据Console.WriteLine(“已接收到的” + 字节 +
12、 “字节”);Console.WriteLine(“当前日期和时间是:” + 时间);tcpc.Close();TCPListenerTCPListener 类便于在来自某个客户机的 TCP 连接的特定套接字上进行侦听的工作。请参见下面包括在 QuickStart 文档中的日期/时间服务器示例。使用 C# 编写using System;using System.Net;using System.Net.Sockets;using System.Text;class Serverpublic static void Main()DateTime now;String strDateLine;En
13、coding ASCII = Encoding.ASCII;/ 在端口 13 进行侦听TCPListener tcpl = new TCPListener(13);tcpl.Start();Console.WriteLine(“正在等待客户进行连接”);Console.WriteLine(“请按 Ctrl+c 退出.”);while (true)/ 接收会阻塞,直到有人连接上Socket s = tcpl.Accept();/ 获取当前的日期和时间并将它连接成一个字符串now = DateTime.Now;strDateLine = now.ToShortDateString() + +now
14、.ToLongTimeString();/ 将该字符串转换成一个字节数组并发送它Byte byteDateLine =ASCII.GetBytes(strDateLine.ToCharArray();s.Send(byteDateLine, byteDateLine.Length, 0);Console.WriteLine(“发送” + strDateLine); #region Download: File transfer FROM ftp server / / Copy a file from FTP server to local / / Target filename, if req
15、uired / Full path of the local file / / Target can be blank (use same filename), or just a filename / (assumes current directory) or a full path and filename public bool Download(string sourceFilename, string localFilename, bool PermitOverwrite) /2. determine target file FileInfo fi = new FileInfo(l
16、ocalFilename); return this.Download(sourceFilename, fi, PermitOverwrite); /Version taking an FtpFileInfo public bool Download(FtpFileInfo file, string localFilename, bool permitOverwrite) return this.Download(file.FullName, localFilename, permitOverwrite); /Another version taking FtpFileInfo and Fil
17、eInfo public bool Download(FtpFileInfo file, FileInfo localFI, bool permitOverwrite) return this.Download(file.FullName, localFI, permitOverwrite); /Version taking string/FileInfo public bool Download(string sourceFilename, FileInfo targetFI, bool permitOverwrite) /1. check target if (targetFI.Exist
18、s & !(permitOverwrite) throw (new ApplicationException(Target file already exists); /2. check source string target; if (sourceFilename.Trim() = ) throw (new ApplicationException(File not specified); else if (sourceFilename.Contains(/) /treat as a full path target = AdjustDir(sourceFilename); else /t
19、reat as filename only, use current directory target = CurrentDirectory + sourceFilename; string URI = Hostname + target; /3. perform copy System.Net.FtpWebRequest ftp = GetRequest(URI); /Set request to download a file in binary mode ftp.Method = System.Net.WebRequestMethods.Ftp.DownloadFile; ftp.Use
20、Binary = true; /open request and get response stream using (FtpWebResponse response = (FtpWebResponse)ftp.GetResponse() using (Stream responseStream = response.GetResponseStream() /loop to read & write to file using (FileStream fs = targetFI.OpenWrite() try byte buffer = new byte2048; int read = 0;
21、do read = responseStream.Read(buffer, 0, buffer.Length); fs.Write(buffer, 0, read); while (!(read = 0); responseStream.Close(); fs.Flush(); fs.Close(); catch (Exception) /catch error and delete file only partially downloaded fs.Close(); /delete target file as its incomplete targetFI.Delete(); throw;
22、 responseStream.Close(); response.Close(); return true; #endregion 简单的UDP收发. 发送 C# code try Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); /向此网段发广播包 int UDPListenerPort = 8082; IPAddress broadcast = IPAddress.Parse(192.168.0.255); /此处根据IP及子网掩码改为相应的广播IP string
23、ts = This is UPD string for sending; byte sendbuf = Encoding.ASCII.GetBytes(ts); IPEndPoint ep = new IPEndPoint(broadcast, UDPListenerPort); s.SendTo(sendbuf, ep); catch (Exception e) 接收 C# code UdpClient listener; int UDPListenerPort = 8082; IPEndPoint groupEP = new IPEndPoint(IPAddress.Any, UDPLis
24、tenerPort); try while (true) byte bytes = listener.Receive(ref groupEP); string RecIP = groupEP.ToString().Substring(0, groupEP.ToString().IndexOf(:); /收到发送UPD端的IP string RecStr = Encoding.ASCII.GetString(bytes, 0, bytes.Length); /收到的UPD字符串 catch C# code TCPClient TCPClient 类提供了一种使用 TCP 协议连接到某个端点的简化
25、方法。它还通过 NetworkStream 对象展现在连接过程中读取或写入的数据。请参见下面从 QuickStart 文档中摘录的日期/时间客户机示例。 使用 C# 编写 using System; using System.Net; using System.Net.Sockets; using System.IO; using System.Text; class Client public static void Main(String args) TCPClient tcpc = new T 来一个Remoting的: C# codeusing System; namespace Re
26、motable public class RemotableType : MarshalByRefObject private string _internalString = This is the RemotableType.; public string StringMethod() return _internalString; using System; using System.Runtime.Remoting; namespace RemotingFirst public class Listener public static void Main() RemotingConfi
27、guration.Configure(Listener.exe.config); Console.WriteLine(Listening for requests. Press Enter to exit); Console.ReadLine(); using System; using System.Runtime.Remoting; namespace Client public class Client public static void Main() RemotingConfiguration.Configure(Client.exe.config); Remotable.RemotableType remoteObject = new Remotable.RemotableType(); Console.WriteLine(remoteObject.StringMethod(); Listener.exe.config 实只要用到Socket联接,基本上就得使用Thread,是交叉使用的。 C#封装的Socket用法基本上不算很复杂,只是不知
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1