C#完整的通信代码点对点点对多同步异步UDPTCPWord文档格式.docx
- 文档编号:4009404
- 上传时间:2023-05-02
- 格式:DOCX
- 页数:50
- 大小:32.23KB
C#完整的通信代码点对点点对多同步异步UDPTCPWord文档格式.docx
《C#完整的通信代码点对点点对多同步异步UDPTCPWord文档格式.docx》由会员分享,可在线阅读,更多相关《C#完整的通信代码点对点点对多同步异步UDPTCPWord文档格式.docx(50页珍藏版)》请在冰点文库上搜索。
"
Remote.ToString());
Console.WriteLine(Encoding.ASCII.GetString(data,0,recv));
//客户机连接成功后,发送欢迎信息
stringwelcome="
Welcome!
;
//字符串与字节数组相互转换
data=Encoding.ASCII.GetBytes(welcome);
//发送信息
newsock.SendTo(data,data.Length,SocketFlags.None,Remote);
while(true)
data=newbyte[1024];
//发送接受信息
recv=newsock.ReceiveFrom(data,refRemote);
Console.WriteLine(Encoding.ASCII.GetString(data,0,recv));
newsock.SendTo(data,recv,SocketFlags.None,Remote);
}
C#code
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Net;
usingSystem.Net.Sockets;
namespaceUDPClient
{
classProgram
{
staticvoidMain(string[]args)
stringinput,stringData;
//构建TCP服务器
ThisisaClient,hostnameis{0}"
Dns.GetHostName());
//设置服务IP,设置TCP端口号
IPEndPointipep=newIPEndPoint(IPAddress.Parse("
127.0.0.1"
),8001);
//定义网络类型,数据连接类型和网络协议UDP
Socketserver=newSocket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp);
Hello!
data=Encoding.ASCII.GetBytes(welcome);
server.SendTo(data,data.Length,SocketFlags.None,ipep);
EndPointRemote=(EndPoint)sender;
data=newbyte[1024];
intrecv=server.ReceiveFrom(data,refRemote);
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=newbyte[1024];
recv=server.ReceiveFrom(data,refRemote);
stringData=Encoding.ASCII.GetString(data,0,recv);
Console.WriteLine(stringData);
}
StoppingClient."
server.Close();
TCPClient
TCPClient类提供了一种使用TCP协议连接到某个端点的简化方法。
它还通过NetworkStream对象展现在连接过程中读取或写入的数据。
请参见下面从QuickStart文档中摘录的日期/时间客户机示例。
使用C#编写
usingSystem.IO;
classClient
publicstaticvoidMain(String[]args)
TCPClienttcpc=newTCPClient();
Byte[]read=newByte[32];
if(args.Length!
=1)
Console.WriteLine(“请在命令行中指定服务器名称”);
return;
}
Stringserver=args[0];
//验证服务器是否存在
if(DNS.GetHostByName(server)==null)
Console.WriteLine(“找不到服务器:
”+服务器);
//尝试连接到服务器
if(tcpc.Connect(server,13)==-1)
Console.WriteLine(“无法连接到服务器:
//获取流
Streams=tcpc.GetStream();
//读取流并将它转换为ASCII码形式
intbytes=s.Read(read,0,read.Length);
StringTime=Encoding.ASCII.GetString(read);
//显示数据
Console.WriteLine(“已接收到的”+字节+“字节”);
Console.WriteLine(“当前日期和时间是:
”+时间);
tcpc.Close();
TCPListener
TCPListener类便于在来自某个客户机的TCP连接的特定套接字上进行侦听的工作。
请参见下面包括在QuickStart文档中的日期/时间服务器示例。
classServer
publicstaticvoidMain()
DateTimenow;
StringstrDateLine;
EncodingASCII=Encoding.ASCII;
//在端口13进行侦听
TCPListenertcpl=newTCPListener(13);
tcpl.Start();
Console.WriteLine(“正在等待客户进行连接”);
Console.WriteLine(“请按Ctrl+c退出...”);
while(true)
//接收会阻塞,直到有人连接上
Sockets=tcpl.Accept();
//获取当前的日期和时间并将它连接成一个字符串
now=DateTime.Now;
strDateLine=now.ToShortDateString()+"
+
now.ToLongTimeString();
//将该字符串转换成一个字节数组并发送它
Byte[]byteDateLine=
ASCII.GetBytes(strDateLine.ToCharArray());
s.Send(byteDateLine,byteDateLine.Length,0);
Console.WriteLine(“发送”+strDateLine);
}
#region"
Download:
FiletransferFROMftpserver"
///<
summary>
///CopyafilefromFTPservertolocal
/summary>
paramname="
sourceFilename"
>
Targetfilename,ifrequired<
/param>
localFilename"
Fullpathofthelocalfile<
returns>
<
/returns>
remarks>
Targetcanbeblank(usesamefilename),orjustafilename
///(assumescurrentdirectory)orafullpathandfilename<
/remarks>
publicboolDownload(stringsourceFilename,stringlocalFilename,boolPermitOverwrite)
//2.determinetargetfile
FileInfofi=newFileInfo(localFilename);
returnthis.Download(sourceFilename,fi,PermitOverwrite);
//VersiontakinganFtpFileInfo
publicboolDownload(FtpFileInfofile,stringlocalFilename,boolpermitOverwrite)
returnthis.Download(file.FullName,localFilename,permitOverwrite);
//AnotherversiontakingFtpFileInfoandFileInfo
publicboolDownload(FtpFileInfofile,FileInfolocalFI,boolpermitOverwrite)
returnthis.Download(file.FullName,localFI,permitOverwrite);
//Versiontakingstring/FileInfo
publicboolDownload(stringsourceFilename,FileInfotargetFI,boolpermitOverwrite)
//1.checktarget
if(targetFI.Exists&
&
!
(permitOverwrite))
throw(newApplicationException("
Targetfilealreadyexists"
));
//2.checksource
stringtarget;
if(sourceFilename.Trim()=="
"
)
Filenotspecified"
elseif(sourceFilename.Contains("
/"
))
//treatasafullpath
target=AdjustDir(sourceFilename);
else
//treatasfilenameonly,usecurrentdirectory
target=CurrentDirectory+sourceFilename;
stringURI=Hostname+target;
//3.performcopy
System.Net.FtpWebRequestftp=GetRequest(URI);
//Setrequesttodownloadafileinbinarymode
ftp.Method=System.Net.WebRequestMethods.Ftp.DownloadFile;
ftp.UseBinary=true;
//openrequestandgetresponsestream
using(FtpWebResponseresponse=(FtpWebResponse)ftp.GetResponse())
using(StreamresponseStream=response.GetResponseStream())
//looptoread&
writetofile
using(FileStreamfs=targetFI.OpenWrite())
try
byte[]buffer=newbyte[2048];
intread=0;
do
read=responseStream.Read(buffer,0,buffer.Length);
fs.Write(buffer,0,read);
}while(!
(read==0));
responseStream.Close();
fs.Flush();
fs.Close();
catch(Exception)
//catcherroranddeletefileonlypartiallydownloaded
//deletetargetfileasit'
sincomplete
targetFI.Delete();
throw;
response.Close();
returntrue;
#endregion
简单的UDP收发.
发送
try
Sockets=newSocket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp);
//向此网段发广播包
intUDPListenerPort=8082;
IPAddressbroadcast=IPAddress.Parse("
192.168.0.255"
//此处根据IP及子网掩码改为相应的广播IP
stringts="
ThisisUPDstringforsending"
byte[]sendbuf=Encoding.ASCII.GetBytes(ts);
IPEndPointep=newIPEndPoint(broadcast,UDPListenerPort);
s.SendTo(sendbuf,ep);
catch(Exceptione)
{}
接收
UdpClientlistener;
IPEndPointgroupEP=newIPEndPoint(IPAddress.Any,UDPListenerPort);
byte[]bytes=listener.Receive(refgroupEP);
stringRecIP=groupEP.ToString().Substring(0,groupEP.ToString().IndexOf("
:
//收到发送UPD端的IP
stringRecStr=Encoding.ASCII.GetString(bytes,0,bytes.Length);
//收到的UPD字符串
catch
{}
TCPClient
使用C#编写
classClient
publicstaticvoidMain(String[]args)
TCPClienttcpc=newT…
来一个Remoting的:
namespaceRemotable
publicclassRemotableType:
MarshalByRefObject
privatestring_internalString="
ThisistheRemotableType."
publicstringStringMethod()
return_internalString;
usingSystem.Runtime.Remoting;
namespaceRemotingFirst
publicclassListener
publicstaticvoidMain()
RemotingConfiguration.Configure("
Listener.exe.config"
Listeningforrequests.PressEntertoexit"
Console.ReadLine();
namespaceClient
publicclassClient
Client.exe.config"
Remotable.RemotableTyperemoteObject=newRemotable.RemotableType();
Console.WriteLine(remoteObject.StringMethod());
Listener.exe.config
<
?
xmlversion="
1.0"
encoding="
utf-8"
?
configuration>
system.runtime.remoting>
application>
service>
wellknown
mode="
Singleton"
type="
Remotable.RemotableType,RemotableType"
objectUri="
RemotableType.rem"
/>
/service>
channels>
channelref="
http"
port="
8989"
/>
/channels>
/application>
/system.runtime.remoting>
/configuration>
实只要用到Socket联接,基本上就得使用Thread,是交叉使用的。
C#封装的Socket用
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C# 完整 通信 代码 点对点 同步 异步 UDPTCP