请大侠们帮帮手,关于网络字节序的问题(HostToNetworkOrder、NetworkToHostOrder)

arsang 2004-07-27 04:50:34
现在要写一个网络协议,接收和发送的数据全部要用网络字节序。小弟在这一方面不是很明白,有请各位大侠们给出一个发送和接收的例程。谢谢啦。
...全文
328 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
tibet 2004-07-29
  • 打赏
  • 举报
回复
只对数值型的做网络字节序
而字符型的不用管
arsang 2004-07-28
  • 打赏
  • 举报
回复
协议中要求:“传输数据包中的字段在传输过程中必须采用网络字节序。”有些不明白啊。是不是对数据包中的每一个字节全采用网络字节序来传输?
arsang 2004-07-28
  • 打赏
  • 举报
回复
收到,正在看。先谢谢先。
weilysunhg 2004-07-28
  • 打赏
  • 举报
回复
//client
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

namespace VarTcpClient
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
class Class1
{
private static int SendVarData(Socket s,byte[] data)
{
int total=0,size=data.Length;
int dataleft=size;
int sent;

byte[] datasize=new byte[4];
datasize=BitConverter.GetBytes(size);
sent=s.Send(datasize);
while(total<size)
{
sent=s.Send(data,total,dataleft,SocketFlags.None);
total+=sent;
dataleft-=sent;
}
return total;
}
private static byte[] ReceiveVarData(Socket s)
{
int total=0;
int recv;
byte[] datasize=new byte[4];

recv=s.Receive(datasize,0,4,0);
int size=BitConverter.ToInt32(datasize,0);
int dataleft=size;
byte[] data=new byte[size];
while (total<size)
{
recv=s.Receive(data,total,dataleft,0);
if (recv==0)
{
data=Encoding.ASCII.GetBytes("exit");
break;
}
total+=recv;
dataleft-=recv;
}
return data;
}
[STAThread]
static void Main(string[] args)
{
byte[] data=new byte[1024];
int sent;
IPEndPoint ipep=new IPEndPoint(IPAddress.Parse("127.0.0.1"),9050);
Socket server=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
try
{
server.Connect(ipep);
}
catch(SocketException e)
{
Console.WriteLine("Unable to connect to server.");
Console.WriteLine(e.ToString());
return;
}
data=ReceiveVarData(server);
string stringData=Encoding.ASCII.GetString(data);
Console.WriteLine(stringData);

string message1="this is the first test";
string message2="A short test";
string message3="this is an even longer test.The quick brown fox jumps over the lazy dog.";
string message4="a";
string message5="The last test";

sent=SendVarData(server,Encoding.ASCII.GetBytes(message1));
sent=SendVarData(server,Encoding.ASCII.GetBytes(message2));
sent=SendVarData(server,Encoding.ASCII.GetBytes(message3));
sent=SendVarData(server,Encoding.ASCII.GetBytes(message4));
sent=SendVarData(server,Encoding.ASCII.GetBytes(message5));
Console.WriteLine("Disconnected from server........");
server.Shutdown(SocketShutdown.Both);
server.Close();
Console.ReadLine();
}
}
}
weilysunhg 2004-07-28
  • 打赏
  • 举报
回复
//server

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

namespace VarTCPSrvr
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
class Class1
{
private static int SendVarData(Socket s,byte[] data)
{
int total=0,size=data.Length;
int dataleft=size;
int sent;

byte[] datasize=new byte[4];
datasize=BitConverter.GetBytes(size);
sent=s.Send(datasize);
while(total<size)
{
sent=s.Send(data,total,dataleft,SocketFlags.None);
total+=sent;
dataleft-=sent;
}
return total;
}
private static byte[] ReceiveVarData(Socket s)
{
int total=0;
int recv;
byte[] datasize=new byte[4];

recv=s.Receive(datasize,0,4,0);
int size=BitConverter.ToInt32(datasize,0);
int dataleft=size;
byte[] data=new byte[size];
while (total<size)
{
recv=s.Receive(data,total,dataleft,0);
if (recv==0)
{
data=Encoding.ASCII.GetBytes("exit");
break;
}
total+=recv;
dataleft-=recv;
}
return data;
}
[STAThread]
static void Main(string[] args)
{
byte[] data=new byte[1024];
IPEndPoint ipep=new IPEndPoint(IPAddress.Any,9050);
Socket newsock=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
newsock.Bind(ipep);
newsock.Listen(10);
Console.WriteLine("Waiting for a client.......");
Socket client=newsock.Accept();
IPEndPoint newclient=(IPEndPoint)client.RemoteEndPoint;
Console.WriteLine("Connected with {0} at port{1}",newclient.Address,newclient.Port);
string welcome="Welcome to my server";
data=Encoding.ASCII.GetBytes(welcome);
int sent=SendVarData(client,data);
for (int i=0;i<5;i++)
{
data=ReceiveVarData(client);
Console.WriteLine(Encoding.ASCII.GetString(data));
}
Console.WriteLine("Disconnected from {0}",newclient.Address);
newsock.Close();
client.Close();
Console.ReadLine();
}
}
}
arsang 2004-07-27
  • 打赏
  • 举报
回复

怎么没有人顶啊。帮兄弟一把。谢啦 。。。。。。。。。。

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧