62,046
社区成员
发帖
与我相关
我的任务
分享
int port = 6000;
string host = "127.0.0.1";
IPAddress ip = IPAddress.Parse(host);
IPEndPoint ipe = new IPEndPoint(ip, port);
Socket sSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sSocket.Bind(ipe);
sSocket.Listen(0);
Console.WriteLine("监听已经打开,请等待");
//receive message接收
Socket serverSocket = sSocket.Accept();
Console.WriteLine("连接已经建立");
string recStr = "";
byte[] recByte = new byte[4096];
int bytes = serverSocket.Receive(recByte, recByte.Length, 0);
recStr += Encoding.ASCII.GetString(recByte, 0, bytes);//接收报文
//接收报文长度的感觉意思代码如下行
//要求发过来的长度是2字节二进制格式
int sh2 = System.BitConverter.ToInt16(recByte, 0);
//这是字节转int,但好像不是二进制的字节转的呀?
//执行得到不是想要的,只是个意思
//send message发送
Console.WriteLine("服务器端获得信息:{0}", recStr);
// recStr接收到的
//想要把接收到的报文,包括报文头长度,报文头,报文体长度,报文体原封不动再发回客户端
string sendStr = recStr;
byte[] sendByte = Encoding.ASCII.GetBytes(sendStr);
serverSocket.Send(sendByte, sendByte.Length, 0);
serverSocket.Close();
sSocket.Close();
int port = 6000;
string host = "127.0.0.1";//服务器端ip地址
IPAddress ip = IPAddress.Parse(host);
IPEndPoint ipe = new IPEndPoint(ip, port);
Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
clientSocket.Connect(ipe);
//报文头长度和报文头内容
string _header = "{"mode":"0"}";//报文头内容,拼接json格式,mode为0报文 体不加密,为1报文 体加密
short _len = (short)_header.Length;//报文头长度
//send message发送
//报文头长度要求为2字节二进制格式,这里主要是我不会的了
byte[] bslen = new byte[2];//定义2字节
bslen = BitConverter.GetBytes(_len);//二进制格式,这里也是意思,这样好像不是二进制
或这样
// bslen = Encoding.GetEncoding(936).GetBytes(Convert.ToString(_len, 2));//感觉这样是二进制了
//报文体
string bodyTpl =
@"
<Root>
<Head>
<Trxcode>{0}</Trxcode>
<count>{1}</count>
</Head>
</Root>";
string Trxcode = "中文";//交易代码
string count = "您好";//记录数量
string body = string.Format(bodyTpl, Trxcode, count);
//报文体长度
short _len2t = (short)body .Length;//报文头长度
//报文体长度要求为2字节二进制格式,这里主要是我不会的了
byte[] bslen2t = new byte[2];//定义2字节
bslen2t = BitConverter.GetBytes(_len2t);//二进制格式,这里也是意思,这样好像不是二进制
或这样
// bslen = Encoding.GetEncoding(936).GetBytes(Convert.ToString(_len2t, 2));//感觉这样是二进制了
byte[] bsheader = Encoding.ASCII.GetBytes(_header);
byte[] bsbody = Encoding.ASCII.GetBytes(body);
//这里是分开发送的,这样对吗?服务器端如何接收,这又是我不会的了
clientSocket.Send(bslen);
clientSocket.Send(bsheader);
clientSocket.Send(bslen2t);
clientSocket.Send(bsbody);
//或者合在一起发
//byte[] zh = Encoding.GetEncoding(936).GetBytes(Convert.ToString(_len, 2) + _header +Convert.ToString(_len2t, 2) + body);
// clientSocket.Send(zh);
//但这样不能用BitConverter.GetBytes(_len)这样了,总之就是倒底如何长度是2字节二进制格式
//还有就是如果长度不用2字节二进制格式,就是一个数值,那要如何发送,是分开发?还是合在一起发,搞晕了
//接收时,合在一起发的就截取,但是以字符串还是byte[],有区别吗,以byte[]怎以截取?
//分开发的,又怎么分开接收呢?
//receive message接收。客户端发出后,服务器端再原封不动发回来接收
string recStr = "";
byte[] recBytes = new byte[4096];
int bytes = clientSocket.Receive(recBytes, recBytes.Length, 0);
recStr += Encoding.ASCII.GetString(recBytes, 0, bytes);
Console.WriteLine(recStr);
clientSocket.Close();