socket请求时XML

socket传文件
private string path = "F:\\SmartMovie.EXE"; //要发送的文件

private Socket s;

private void listen()
{
string ip = "127.0.0.1"; //远程IP 这里定义为自己的机器
IPAddress[] ih = Dns.GetHostAddresses(ip); //获得IP列表
IPAddress newip = ih[0]; //获取IP地址
int port = 6789; //定义端口
IPEndPoint Conncet = new IPEndPoint(newip, port); //构造结点
s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //初始化socket

try
{
s.Connect(Conncet); //连接远程服务器
if (s.Connected) //如果连接成功 s.Connected 则为true 否则为 false
{

Console.WriteLine("连接成功");
Thread t = new Thread(new ThreadStart(set)); //创建进程
t.Start(); //开始进程
Console.WriteLine("发送完毕")

}

}
catch(NullReferenceException e)
{

Console.WriteLine("{0}",e);

}

private void set() //创建set函数
{
Console.WriteLine("开始发送数据");
byte[] b = new byte[10000000]; //创建文件缓冲区,这里可以认为文件的最大值
FileStream file = File.Open(path, FileMode.Open,FileAccess.Read); //创建文件流
int start = 0;
int end = (int)file.Length; //获取文件长度文件传送如果有需要超过int的范围估计就要改写FileStream类了

try
{
while (end != 0)
{
int count = file.Read(b, start, end); //把数据写进流
start += count;
end -= count;
}
while (start != 0)
{
int n = s.Send(b, end, start, SocketFlags.None); //用Socket的Send方法发送流
end += n;
start -= n;
}

file.Close(); //关闭文件流
s.Close(); //关闭Socket
}
catch (NullReferenceException e)
{
Console.WriteLine("{0}", e);
}
}

这样文件发送的模型就实现了

接下去实现文件的接收,首先要确定对方发送文件的长度,其实上面的那段还要加入发送文件长度的功能,实现很简单,就是发送int变量end ,然后要求接收代码返回一个Boolean确定是否发送,这里为了更简明的说清楚原理并没有实现

private void get()
{
string path = "G:\\da.exe"; //接收的文件
FileStream file = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write); //写入文件流
TcpListener listen = new TcpListener(6789); //监听端口
Socket s1 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //定义Socket并初始化
try
{
listen.Start(); //开始监听
s1 = listen.AcceptSocket(); //获取Socket连接
byte[] data = new byte[10000000]; //定义缓冲区
int longer = data.Length;
int start = 0;
int mid = 0;
if (s1.Connected) //确定连接
{
Console.WriteLine("连接成功");
int count = s1.Receive(data, start, longer, SocketFlags.None); //把接收到的byte存入缓冲区
mid += count;
longer -= mid;
while (count != 0)
{
count = s1.Receive(data, mid, longer, SocketFlags.None);
mid += count;
longer -= mid;
}
file.Write(data, 0, 1214134); //写入文件,1214134为文件大小,可以用socket发送获得,代码前面已经说明。
s1.Close();
file.Close();
}
}
catch(NullReferenceException e)
{
Console.WriteLine("{0}",e);
}
}把sml格式的文件当作应用层负载(SDU),下面直接用TCP/UDP的socket传即可。
根据XML格式做一个协议,根据协议组包和解包!!
格尔木金峰路棚户区 好看漫画女孩图片 类似暗色温柔的小说 android设备管理器激活 万圣节魔法袍 美痴女松本麻里奈视频 gianna与科比单挑 魔方系统大师 543ai com 路由器模式选哪个好 风景动态手机壁纸 vue 非父子组件的通信 senplus 24n cas号 the green party眼镜 善于反思的名人事例 fetch bring 用法 寿光孙成华怎么了 hello语音交友u处u连 鞋带双色混系 hot japanesr home 国办发 2013 68号 1.76传奇精品gzxhedu allez 2018 gta5 1.42 鲅鱼圈王佩漫画怎么了 java set取出第一个值 micrf213ayqs atfb 217磁力 2017年南宁初中地段 tif与tiff

Copyright 资料库 Some Rights Reserved

如反馈或投诉等情况联系:une35498#163.com