c# socket传输struct类型
data结构体类型
public struct datas
{
public string test1;
public string test2;
}
//socket服务器端
public void SocketServer()
{
Socket listener = new Socket(AddressFamily.InterNetwork,
SocketType.Stream,
ProtocolType.Tcp);
listener.Bind(new IPEndPoint(getLocalmachineIPAddress(), 2323));
listener.Listen(10);
while (true)
{
Socket socket = listener.Accept();
string receivedValue = string.Empty;
while (true)
{
byte[] receivedBytes = new byte[1024];
int numBytes = socket.Receive(receivedBytes);
Console.WriteLine("Receiving .");
receivedValue += Encoding.ASCII.GetString(receivedBytes,
0, numBytes);
if (receivedValue.IndexOf("[FINAL]") > -1)
{
break;
}
}
byte[] buffer = new byte[1024000];
if (receivedValue.Contains("get gateway rooms"))
{
MemoryStream mStream = new MemoryStream();
BinaryFormatter bf = new BinaryFormatter();
datas sendData;
sendData.m_DictRooms = FormMain.DictRooms;
sendData.m_DictRoomNameText = FormMain.DictRoomNameText;
bf.Serialize(mStream, sendData);
mStream.Flush();
mStream.Position = 0;
mStream.Read(buffer, 0, buffer.Length);
}
//string replyValue = "Message successfully received.";
//byte[] replyMessage = Encoding.ASCII.GetBytes(replyValue);
socket.Send(buffer);
socket.Shutdown(SocketShutdown.Both);
socket.Close();
}
listener.Close();
}
//socket客户端
private void socketClient(object sender, EventArgs e)
{
if (comboBoxGateway.SelectedItem != null)
{
byte[] receivedBytes = new byte[1024000];
IPHostEntry ipHost = Dns.Resolve(comboBoxGateway.SelectedItem.ToString());
IPAddress ipAddress = ipHost.AddressList[0];
IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, 2323);
Socket sk = new Socket(AddressFamily.InterNetwork,
SocketType.Stream,
ProtocolType.Tcp);
sk.Connect(ipEndPoint);
string sendingMessage = "get gateway rooms";
byte[] forwardMessage = Encoding.ASCII.GetBytes(sendingMessage
+ "[FINAL]");
sk.Send(forwardMessage);
int totalBytesReceived = sk.Receive(receivedBytes);
MemoryStream mStream = new MemoryStream();
//ReceiveDatas = bf.Deserialize(receivedBytes,mStream );
mStream.Write(receivedBytes, 0, receivedBytes.Length);
mStream.Flush();
mStream.Position = 0;
BinaryFormatter bf = new BinaryFormatter();
if (mStream.Capacity > 0)
{
datas receiveDatas = (datas)bf.Deserialize(mStream);
}
sk.Shutdown(SocketShutdown.Both);
sk.Close();
//加载新选择的网关房间
InitializeSelectRoomsTab();
}
}
c# socket传输struct类型的更多相关文章
- C++ socket 传输不同类型数据的四种方式
使用socket传输组织好的不同类型数据,有四种不同的方式(我知道的嘿嘿): a. 结构体 b. Json序列化 c. 类对象 d. protobuf 下面逐一整理一下,方便以后进行项目开发. 1. ...
- Protobuf3 + Netty4: 在socket上传输多种类型的protobuf数据
Protobuf序列化的字节流数据是不能自描述的,当我们通过socket把数据发送到Client时,Client必须知道发送的是什么类型的数据,才能正确的反序列化它.这严重影响限制了C/S功能的实现, ...
- [C#技术参考]Socket传输结构数据
最近在做一个机器人项目,要实时的接收机器人传回的坐标信息,并在客户端显示当前的地图和机器人的位置.当然坐标的回传是用的Socket,用的是C++的结构体表示的坐标信息.但是C#不能像C++那样很eas ...
- Python Socket传输文件
发送端可以不停的发送新文件,接收端可以不停的接收新文件. 例如:发送端输入:e:\visio.rar,接收端会默认保存为 e:\new_visio.rar,支持多并发,具体实现如下: 接收端: 方法一 ...
- 网络编程:tcp、udp、socket、struct、socketserver
一.TCP.UDP 一.ARP(Address Resolution Protocol)即地址解析协议,用于实现从 IP 地址到 MAC 地址的映射,即询问目标IP对应的MAC地址. 二.在网络通信中 ...
- socket编程(struct报头)网络编程
目录 一:socket编程 1.简介 2.参数说明: 3.socket套接字方法 4.socket编程思路: 二:socket套接字编程 1.socket简易版编程 2.通信循环 三:通信循环及代码优 ...
- python socket 传输文件
推荐资料 https://www.cnblogs.com/xiaokang01/p/9865724.html socket传输文件 思路: # 先将报头转换成字符串(json.dumps), 再将字符 ...
- unity探索者之socket传输protobuf字节流(一)
版权声明:本文为原创文章,转载请声明http://www.cnblogs.com/unityExplorer/p/6974229.html 近期在做一个棋牌项目,需要用到socket传输protobu ...
- sockaddr struct 类型重定义
windows.h和winsock2.h有类型重定义我是知道的,本来就一个库来说没问题,把winsock2放到windows.h前或先定义WIN32_LEAN_AND_MEAN都能解决问题但现的出了问 ...
随机推荐
- Zabbix-agent使用自带模板监控 MySQL
1.rpm -ivh http://repo.zabbix.com/zabbix/2.4/rhel/6/x86_64/zabbix-release-2.4-1.el6.noarch.rpm 2.yum ...
- openui5的资料比较少
openui5的资料比较少,稳定优秀的开源框架,国内了解的人了了,都在追AngularJS.ExtJS.React. React比较新,非死不可出品而且裹挟Native的噱头.Mobile Nativ ...
- AngularJSLiveLessons
https://www.youtube.com/watch?v=8P4K6NCFtJ8&feature=youtu.be&list=PLzpMMGE0rxPkenSURlthkctgK ...
- [MFC] 对话框菜单项Menu选中打勾(单选,多选)
近期需要实现一个功能:MFC对话框中,一项菜单下有五个菜单项,改变菜单项选中状态,每次只能选择其中一个打勾.(单选) 然后在网上搜了下资料,稍微总结下,以防后面用到. 1.单选实现: CMenu* m ...
- hadoop(一)
1 环境熟悉安装jdk.hadoop配置xml文件,启动伪分布式运行example-jar,测试mapreduce程序2 mapreduce编程使用eclipse开发mapreduce程序,导出jar ...
- [Jenkins]admin用户登陆,提示登陆无效(之前登陆OK,三天没有登陆,突然提示登陆无效,重启无法解决)的解决方法
问题出现现象: 系统一直正常,突然某天登陆,提示用户无效,无法登陆成功. 问题分析过程: 1.查看日志:/var/log/jenkins/jenkins.log(通过ps -elf | grep je ...
- QList 排序
现有结构体: struct fileInfo { QDate createTime; QString fileName; } QList<fileInfo> fileLst; // 对文件 ...
- Jmeter(四)-断言/检查点
断言就类似LoadRunner中的检查点.对上一个请求返回的信息,做字符串.数据包大小.HTML.XML.图片等做判断,确保返回的信息的准确性. 添加响应断言:欢迎您 如果登陆页登陆成功,则后台会返回 ...
- table表头thead固定
<html> <head> <meta charset="utf-8"/> <script type="text/javascr ...
- Python学习笔记——基础篇【第五周】——算法(4*4的2维数组和冒泡排序)、时间复杂度
目录 1.算法基础 2.冒泡排序 3.时间复杂度 (1)时间频度 (2)时间复杂度 4.指数时间 5.常数时间 6.对数时间 7.线性时间 1.算法基础 要求:生成一个4*4的2维数组并将其顺时针旋 ...