关于UdpClient连接订立传送协议并且发送数据,希望有高手来帮帮忙
下面是代码:
using System;
using System.Collections.Generic;
using System.Text;
using System.Net.Sockets;
using System.Net;
using System.IO;
using System.Threading;
// C#网络编程 - Part.4
// 此段代码演示由客户端发送文件到服务端
// 与此对应的代码为ServerConsole项目中的Server1.cs
namespace ClientConsole {
class Program {
static void Main(string[] args) {
ServerClient client = new ServerClient();
string input;
string path = Environment.CurrentDirectory + "/";
do {
Console.WriteLine("Send File: S1 - Client01.jpg, S2 - Client02.jpg, S3 - Client03.jpg");
Console.WriteLine("Receive File: R1 - Server01.jpg, R1 - Server02.jpg, R3- Server03.jpg");
Console.WriteLine("Press 'Q' to exit. \n");
Console.Write("Enter your choice: ");
input =Console .ReadLine ();
switch(input.ToUpper()){
case "S1":
client.BeginSendFile(path + "Client01.jpg");
break;
case "S2":
client.BeginSendFile(path + "Client02.jpg");
break;
case "S3":
client.BeginSendFile(path + "Client03.jpg");
break;
case "R1":
client.BeginReceiveFile("Server01.jpg");
break;
case "R2":
client.BeginReceiveFile("Server02.jpg");
break;
case "R3":
client.BeginReceiveFile("Server03.jpg");
break;
}
} while (input.ToUpper() != "Q");
client.Dispose();
}
}
public class ServerClient :IDisposable {
private const int BufferSize = 8192;
private byte[] buffer;
private UdpClient client;
private NetworkStream streamToServer;
public ServerClient() {
try {
client = new UdpClient ();
client.Connect("192.168.1.7", 8005); // 与服务器连接
} catch (Exception ex) {
Console.WriteLine(ex.Message);
return;
}
buffer = new byte[BufferSize];
// 打印连接到的服务端信息
Console.WriteLine("Server Connected!{0} --> {1}\n",
client.Client.LocalEndPoint, client.Client.RemoteEndPoint);
//streamToServer .Write (buffer ,0,BufferSize );
}
// 发送消息到服务端
public void SendMessage(string msg) {
byte[] temp = Encoding.Unicode.GetBytes(msg); // 获得缓存
try {
lock (streamToServer ){
streamToServer.Write(temp, 0, temp.Length); // 发往服务器
}
Console.WriteLine("Sent: {0}", msg);
} catch (Exception ex) {
Console.WriteLine("\n do something wrong!!! \n");
Console.WriteLine(ex.Message);
return;
}
}
// 发送文件 - 异步方法
public void BeginSendFile(string filePath) {
ParameterizedThreadStart start =
new ParameterizedThreadStart(SendFile);
start.BeginInvoke(filePath, null, null);
}
private void SendFile(object obj) {
string filePath = obj as string;
SendFile(filePath);
}
// 发送文件 -- 同步方法
public void SendFile(string filePath) {
IPAddress ip = IPAddress.Parse("192.168.1.7");
// 获取本地侦听的端口号
IPEndPoint endPoint = new IPEndPoint(ip,8005);
UdpClient client = new UdpClient();
//client.Client.Listen(4);
int listeningPort = endPoint.Port;
// 获取发送的协议字符串
string fileName = Path.GetFileName(filePath);
FileProtocol protocol =
new FileProtocol(FileRequestMode.Send, listeningPort, fileName);
string pro = protocol.ToString();
SendMessage(pro); // 发送协议到服务端
// 中断,等待远程连接
client .Connect (endPoint );
Console.WriteLine("Start sending file...");
// 把流写入数组里面
// streamToServer .Write (buffer ,0,BufferSize );
// 创建文件流
FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
byte[] fileBuffer = new byte[1024]; // 每次传1KB
int bytesRead;
int totalBytes = 0;
// 创建获取文件发送状态的类
SendStatus status = new SendStatus(filePath);
// 将文件流转写入网络流
try {
do {
Thread.Sleep(10); // 为了更好的视觉效果,暂停10毫秒:-)
bytesRead = fs.Read(fileBuffer, 0, fileBuffer.Length);
//streamToServer .Write(fileBuffer, 0, bytesRead);
totalBytes += bytesRead; // 发送了的字节数
status.PrintStatus(totalBytes); // 打印发送状态
} while (bytesRead > 0);
Console.WriteLine("Total {0} bytes sent, Done!", totalBytes);
} catch {
Console.WriteLine("Server has lost...");
}
// streamToServer.Dispose();
fs.Dispose();
client.Close();
client .Close ();
}
// 接收文件 -- 异步方法
public void BeginReceiveFile(string fileName) {
ParameterizedThreadStart start =
new ParameterizedThreadStart(ReceiveFile);
start.BeginInvoke(fileName, null, null);
}
public void ReceiveFile(object obj) {
string fileName = obj as string;
ReceiveFile(fileName);
}
// 接收文件 -- 同步方法
public void ReceiveFile(string fileName) {
IPAddress ip = IPAddress.Parse("192.168.1.7");
UdpClient client=new UdpClient ();
//client .Client .Listen (4);
// 获取本地侦听的端口号
IPEndPoint endPoint = new IPEndPoint (ip,8005);
int listeningPort = endPoint.Port;
// 获取发送的协议字符串
FileProtocol protocol =
new FileProtocol(FileRequestMode.Receive, listeningPort, fileName);
string pro = protocol.ToString();
SendMessage(pro); // 发送协议到服务端
// 中断,等待远程连接
client .Connect (endPoint );
Console.WriteLine("Start sending file...");
//streamToServer.Write (buffer ,0,BufferSize );
// 获取文件保存的路劲
string filePath =
Environment.CurrentDirectory + "/" + generateFileName(fileName);
// 创建文件流
FileStream fs = new FileStream(filePath, FileMode.CreateNew, FileAccess.Write);
byte[] fileBuffer = new byte[1024]; // 每次传1KB
int bytesRead;
int totalBytes = 0;
// 从缓存buffer中读入到文件流中
do {
bytesRead = streamToServer.Read(buffer, 0, BufferSize);
fs.Write(fileBuffer, 0, bytesRead);
totalBytes += bytesRead;
Console.WriteLine("Receiving {0} bytes ...", totalBytes);
} while (bytesRead > 0);
Console.WriteLine("Total {0} bytes received, Done!", totalBytes);
fs.Dispose();
//streamToServer.Dispose();
client .Close ();
}
// 随机获取一个图片名称
private string generateFileName(string fileName) {
DateTime now = DateTime.Now;
return String.Format(
"{0}_{1}_{2}_{3}", now.Minute, now.Second, now.Millisecond, fileName
);
}
public void Dispose() {
if (streamToServer != null)
streamToServer.Dispose();
if (client != null)
client.Close();
}
}
}
上面是客户端的代码。这个是我自己根据别人TCPClient连接写的,到最后自己都不知道是什么意思了,希望高手来帮帮忙,这个里面就是连接不对,其他的问题都基本上解决了。
下面的是服务端的代码:
using System;
using System.Collections.Generic;
using System.Text;
using System.Net.Sockets;
using System.Net;
using System.IO;
using System.Threading;
// C#网络编程 - Part.4
// 此段代码演示由客户端发送文件到服务端
// 与此对应的代码为ServerConsole项目中的Server1.cs
namespace ClientConsole {
class Program {
static void Main(string[] args) {
ServerClient client = new ServerClient();
string input;
string path = Environment.CurrentDirectory + "/";
do {
Console.WriteLine("Send File: S1 - Client01.jpg, S2 - Client02.jpg, S3 - Client03.jpg");
Console.WriteLine("Receive File: R1 - Server01.jpg, R1 - Server02.jpg, R3- Server03.jpg");
Console.WriteLine("Press 'Q' to exit. \n");
Console.Write("Enter your choice: ");
input =Console .ReadLine ();
switch(input.ToUpper()){
case "S1":
client.BeginSendFile(path + "Client01.jpg");
break;
case "S2":
client.BeginSendFile(path + "Client02.jpg");
break;
case "S3":
client.BeginSendFile(path + "Client03.jpg");
break;
case "R1":
client.BeginReceiveFile("Server01.jpg");
break;
case "R2":
client.BeginReceiveFile("Server02.jpg");
break;
case "R3":
client.BeginReceiveFile("Server03.jpg");
break;
}
} while (input.ToUpper() != "Q");
client.Dispose();
}
}
public class ServerClient :IDisposable {
private const int BufferSize = 8192;
private byte[] buffer;
private UdpClient client;
private NetworkStream streamToServer;
public ServerClient() {
try {
client = new UdpClient ();
client.Connect("192.168.1.7", 8005); // 与服务器连接
} catch (Exception ex) {
Console.WriteLine(ex.Message);
return;
}
buffer = new byte[BufferSize];
// 打印连接到的服务端信息
Console.WriteLine("Server Connected!{0} --> {1}\n",
client.Client.LocalEndPoint, client.Client.RemoteEndPoint);
//streamToServer .Write (buffer ,0,BufferSize );
}
// 发送消息到服务端
public void SendMessage(string msg) {
byte[] temp = Encoding.Unicode.GetBytes(msg); // 获得缓存
try {
lock (streamToServer ){
streamToServer.Write(temp, 0, temp.Length); // 发往服务器
}
Console.WriteLine("Sent: {0}", msg);
} catch (Exception ex) {
Console.WriteLine("\n do something wrong!!! \n");
Console.WriteLine(ex.Message);
return;
}
}
// 发送文件 - 异步方法
public void BeginSendFile(string filePath) {
ParameterizedThreadStart start =
new ParameterizedThreadStart(SendFile);
start.BeginInvoke(filePath, null, null);
}
private void SendFile(object obj) {
string filePath = obj as string;
SendFile(filePath);
}
// 发送文件 -- 同步方法
public void SendFile(string filePath) {
IPAddress ip = IPAddress.Parse("192.168.1.7");
// 获取本地侦听的端口号
IPEndPoint endPoint = new IPEndPoint(ip,8005);
UdpClient client = new UdpClient();
//client.Client.Listen(4);
int listeningPort = endPoint.Port;
// 获取发送的协议字符串
string fileName = Path.GetFileName(filePath);
FileProtocol protocol =
new FileProtocol(FileRequestMode.Send, listeningPort, fileName);
string pro = protocol.ToString();
SendMessage(pro); // 发送协议到服务端
// 中断,等待远程连接
client .Connect (endPoint );
Console.WriteLine("Start sending file...");
// 把流写入数组里面
// streamToServer .Write (buffer ,0,BufferSize );
// 创建文件流
FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
byte[] fileBuffer = new byte[1024]; // 每次传1KB
int bytesRead;
int totalBytes = 0;
// 创建获取文件发送状态的类
SendStatus status = new SendStatus(filePath);
// 将文件流转写入网络流
try {
do {
Thread.Sleep(10); // 为了更好的视觉效果,暂停10毫秒:-)
bytesRead = fs.Read(fileBuffer, 0, fileBuffer.Length);
//streamToServer .Write(fileBuffer, 0, bytesRead);
totalBytes += bytesRead; // 发送了的字节数
status.PrintStatus(totalBytes); // 打印发送状态
} while (bytesRead > 0);
Console.WriteLine("Total {0} bytes sent, Done!", totalBytes);
} catch {
Console.WriteLine("Server has lost...");
}
// streamToServer.Dispose();
fs.Dispose();
client.Close();
client .Close ();
}
// 接收文件 -- 异步方法
public void BeginReceiveFile(string fileName) {
ParameterizedThreadStart start =
new ParameterizedThreadStart(ReceiveFile);
start.BeginInvoke(fileName, null, null);
}
public void ReceiveFile(object obj) {
string fileName = obj as string;
ReceiveFile(fileName);
}
// 接收文件 -- 同步方法
public void ReceiveFile(string fileName) {
IPAddress ip = IPAddress.Parse("192.168.1.7");
UdpClient client=new UdpClient ();
//client .Client .Listen (4);
// 获取本地侦听的端口号
IPEndPoint endPoint = new IPEndPoint (ip,8005);
int listeningPort = endPoint.Port;
// 获取发送的协议字符串
FileProtocol protocol =
new FileProtocol(FileRequestMode.Receive, listeningPort, fileName);
string pro = protocol.ToString();
SendMessage(pro); // 发送协议到服务端
// 中断,等待远程连接
client .Connect (endPoint );
Console.WriteLine("Start sending file...");
//streamToServer.Write (buffer ,0,BufferSize );
// 获取文件保存的路劲
string filePath =
Environment.CurrentDirectory + "/" + generateFileName(fileName);
// 创建文件流
FileStream fs = new FileStream(filePath, FileMode.CreateNew, FileAccess.Write);
byte[] fileBuffer = new byte[1024]; // 每次传1KB
int bytesRead;
int totalBytes = 0;
// 从缓存buffer中读入到文件流中
do {
bytesRead = streamToServer.Read(buffer, 0, BufferSize);
fs.Write(fileBuffer, 0, bytesRead);
totalBytes += bytesRead;
Console.WriteLine("Receiving {0} bytes ...", totalBytes);
} while (bytesRead > 0);
Console.WriteLine("Total {0} bytes received, Done!", totalBytes);
fs.Dispose();
//streamToServer.Dispose();
client .Close ();
}
// 随机获取一个图片名称
private string generateFileName(string fileName) {
DateTime now = DateTime.Now;
return String.Format(
"{0}_{1}_{2}_{3}", now.Minute, now.Second, now.Millisecond, fileName
);
}
public void Dispose() {
if (streamToServer != null)
streamToServer.Dispose();
if (client != null)
client.Close();
}
}
}
上面是客户端的代码。这个是我自己根据别人TCPClient连接写的,到最后自己都不知道是什么意思了,希望高手来帮帮忙,这个里面就是连接不对,其他的问题都基本上解决了。
下面的是服务端的代码:
...全文
相关推荐
C#+欧姆龙udp通讯一个简单的demo
**发送数据** 使用UdpClient的Send方法可以向PLC发送UDP数据包。数据通常需要转换为字节数组。
如何使用UDP协议发送信息程序
**发送数据**:使用`UdpClient.Send()`方法发送数据。该方法需要两个参数:要发送的数据(通常为字节数组)和目标的IP地址和端口。
UDP_c#UDP_vs2013UDP通信_UDP通信_vs2019udp通信_featherss3l_源码.zip
**C#中的UDP通信:**在C#中,UdpClient类提供了发送和接收UDP数据报的方法。例如,`Send()`方法用于发送数据,而`Receive()`方法用于接收数据。
UDP文件传输实例
创建UdpClient实例,并指定本地端口号。2. 分割文件为多个数据块。3. 对每个数据块进行编码并附加序列号和校验和。4. 使用UdpClient的Send方法逐个发送数据块。5.
VB.net UDP作服务端收发数据
**初始化UdpClient**:首先,实例化一个`UdpClient`对象,并指定监听的端口号。


