我写了一个TCP通讯程序,通讯时正常的。 就是传过来的数据我不知道该如何转换。
例如: 我在客户端种写入 123 发送到服务器中 通过跟踪 到
length = sock.Receive(date, 1024, SocketFlags.None);
的时候date的值 :
date[0]=49;
date[1]=50;
date[2]=51;
我想知道用什么方法转换成原来的 123 最好?
我还想请教各位高手。 为什么传递过来以后会变成这样?
public void Receive()
{
byte[] date = new byte[100];
int length = 0;
int message;
while (true)
{
try
{
length = sock.Receive(date, 1024, SocketFlags.None);
if (length > 0) //接收到了数据
{
}
else//没有接收到数据
{
}
}
catch (Exception)
{
break;
}
}
}
例如: 我在客户端种写入 123 发送到服务器中 通过跟踪 到
length = sock.Receive(date, 1024, SocketFlags.None);
的时候date的值 :
date[0]=49;
date[1]=50;
date[2]=51;
我想知道用什么方法转换成原来的 123 最好?
我还想请教各位高手。 为什么传递过来以后会变成这样?
public void Receive()
{
byte[] date = new byte[100];
int length = 0;
int message;
while (true)
{
try
{
length = sock.Receive(date, 1024, SocketFlags.None);
if (length > 0) //接收到了数据
{
}
else//没有接收到数据
{
}
}
catch (Exception)
{
break;
}
}
}
在C#中我采用poll方法,来避免客户端SOCKET连接超时。
当服务器没有启动时,客户端用POLL方法可以很快检查到,不能连接到服务器,于是客户端马上CLOSE掉了该SOCKET;1秒钟后,重新创建SOCKET,继续用poll方法检测能否连接到该服务器。但,当服务器突然启动后,服务器会报“远程主机强迫关闭了一个现有连接”的错误,而我客户端也不会马上显示“连接上了服务器”,这样影响了我用poll方法来检测连接到服务器的及时性和准确性。
请大侠帮小弟分析和解决该问题,万分感激! 如下是:客户端和服务器代码:
客户端:
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Collections;
using System.Threading;
namespace ConsoleApplication9
{
class Program
{
static byte[] MessageArray = new byte[1039];
static void Main(string[] args)
{
Program a = new Program();
for (int i = 0; i < 10000; i++)
{
a.sengMessage();
}
} public void sengMessage()
{
IPAddress address1 = IPAddress.Parse("192.168.16.204");
IPEndPoint iep = new IPEndPoint(address1, 9999);//目的IP地址和端口号
IPAddress LocalAddress = IPAddress.Parse("192.168.16.205");
IPEndPoint iep1 = new IPEndPoint(LocalAddress, 0);//本地IP地址和任意端口号 Socket serversocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
serversocket.Bind(iep1);//指定主通道的数据从本机指定的IP地址(网口)发送。
}
catch
{
Console.WriteLine("绑定失败(发送P2P)");
}
try
{
serversocket.Blocking = false;//设置为非阻塞模式
serversocket.Connect(iep);
}
catch (SocketException)
{
if (serversocket.Poll(1000, SelectMode.SelectWrite))
{
serversocket.Blocking = true;//将SOCKET恢复成阻塞模式
Console.WriteLine("该SOCKET连上");
}
else
{
Console.WriteLine("该SOCKET没有连上");
serversocket.Close
return;//如果不成功就跳出,继续检测能否连上服务器
}
}
int offset = 0;
int size = MessageArray.Length;//长度为1039
int dataleft = size;
try
{
while (dataleft > 0)
{
int sent = serversocket.Send(MessageArray, offset, dataleft, SocketFlags.None);
offset += sent;
dataleft -= sent;
}
Console.WriteLine("已经给计算机发送了P2P消息" + MessageArray[0]);
serversocket.Shutdown(SocketShutdown.Send);
serversocket.Close();
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
}
} 服务器端:
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets; namespace ConsoleApplication1
{
class Program
{
byte[] receivemessage=new byte[1039];
static void Main(string[] args)
{
Program a = new Program();
}
Program()
{
IPAddress address = IPAddress.Parse("192.168.16.204");
IPEndPoint iep = new IPEndPoint(address, 9999);
Socket clientsocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//用于(主通道)P2P的socket通道(接受数据) try
{
clientsocket.Bind(iep);//把套接字与本地地址绑定,从指定的网口和端口收信息
}
catch (SocketException)
{
Console.WriteLine("SOCKET绑定失败!");
return;
}
clientsocket.Listen(30
while (true)
{
Console.WriteLine("等待客户端连接");
Socket client = clientsocket.Accept
try
{
int offset = 0;
int recv;
int dataleft = 1039;//因为发的长度是1039,所以也应该收1039个字节的数据
while (dataleft > 0)
{
recv = client.Receive(receivemessage, offset, dataleft, 0);
if (recv == 0)
break;
offset += recv;
dataleft -= recv;
}
Console.WriteLine("该信息是第{0}条记录", receivemessage[0]);
}
catch(Exception e)
{
Console.WriteLine("~~~~~~~~~~~~~"+e.Message);//远程主机强迫关闭了一个现有连接
}
}
}
}
}
byte[] arybyte = new byte[] { 49, 50, 51 }; string str = Encoding.Default.GetString(arybyte);
str=encoding.bigenglish.getstring(date);//可能英文单词拼写错了你自己看下 就这个
你得到的string就是转换回来的东西。如果你想再转换回去就 date=encoding.bigenglish.getbytes(str);
就这样转来转去,我也刚做这个聊天系统