UDP通信接收端,接收二维数组,内容为0与1
1: using System;
2: using System.Net;
3: using System.Net.Sockets;
4: using System.Text;
5:
6:
7: public class UDPListener
8: {
9: private const int listenPort = 5050;
10: private const int Height = 200;
11: private const int Width = 100;
12: private static void StartListener()
13: {
14: bool[,] test = new bool[Height, Width]; //二维数组的定义方式
15: byte[,] test1 = new byte[Height, Width];
16: UdpClient listener = new UdpClient(listenPort); //本机侦听的端口号实例化。
17: IPEndPoint groupEP = new IPEndPoint(IPAddress.Any, listenPort); //实例化
18:
19: try
20: {
21: long m = 0;
22: int n = 0; //必须为int型,不然会造成溢出。不能为byte,byte就255.
23: int i = 0,j = 0;
24: while (true)
25: {
26: n = 0;
27: Console.WriteLine("Waiting for broadcast");
28: byte[] bytes = listener.Receive(ref groupEP);
29: for (i = 0; i < Height; i++)
30: {
31: for (j = 0; j < Width; j++)
32: {
33: test[i, j] = BitConverter.ToBoolean(bytes,n); //将读到的bytes转换为bool类型的数据,即ture 和 false。
34: n++;
35: if (test[i, j] == true) //将此true 和 false的数组转为只有0与1存在的数组。
36: test1[i,j] = 1;
37: else
38: test1[i,j] = 0;
39: }
40: }
41: for (i = 0; i < Height; i++)
42: {
43: for (j = 0; j < Width; j++)
44: {
45: Console.Write(test1[i,j]) ; //调用控制台程序输出即可。
46: }
47: Console.WriteLine();
48: }
49:
50: //Console.WriteLine("Received broadcast from {0} : {1} hava received {2} times \n",
51: // groupEP.ToString(),Encoding.ASCII.GetString(bytes, 0, bytes.Length),m);
52: }
53:
54: }
55: catch (Exception e)
56: {
57: Console.WriteLine(e.ToString());
58: }
59: //finally
60: //{
61: // //listener.Close();
62: //}
63: }
64:
65: public static int Main()
66: {
67: StartListener();
68:
69: return 0;
70: }
71: }
UDP接收端小程序,将发送端发送过来的数据转换为稀疏矩阵.
下面是发送端程序:
1: #include <Winsock2.h>
2: #pragma comment(lib,"WS2_32.lib")
3: #include <stdio.h>
4: #include<iostream>
5: #include <string>
6: #include<vector>
7: using namespace std;
8: //服务器端口号为5050
9: #define DEFAULT_PORT 5050
10: //缓冲区长度
11: #define DATA_BUFFER 1024
12:
13: void main(int argc,char *argv[])
14: {
15:
16:
17: /*matrix.Num = 1;
18: //matrix.point = new Point[2];
19: memset(&matrix,0,sizeof(matrix));
20: matrix.point[0].x = 1;
21: matrix.point[0].y = 2;
22: matrix.point[0].value = 3;
23: matrix.point[0].U = 4;
24: matrix.point[1].x = 5;
25: matrix.point[1].y = 6;
26: matrix.point[1].value = 7;
27: matrix.point[1].U = 8;
28: int n = 2;
29: int len = 2*sizeof(Point)+2;
30: vector<char> str(len);//声明变长数组
31: //char* str = new char[n];
32: //memset(&str,0,sizeof(str));//将str,赋值0,长度为sizeof
33: memcpy(&str,(char*)&matrix,len);//将matrix里面的值,赋值给str,长度sizeof。与上面刚好相反。
34:
35: //char *buffer=(char *)&matrix;
36: */
37:
38: WSADATA wsaData;
39: SOCKET sClient;
40: int iPort=5050;
41: //服务器地址长度
42: int iLen;
43: //接收数据的缓冲
44: int iSend;
45: int iRecv;
46: //要发送给服务器的信息
47: char send_buf[]="I am a client.";
48: //接收数据的缓冲区
49: char recv_buf[DATA_BUFFER];
50: //服务器端地址
51: struct sockaddr_in ser;
52: //处理命令行中
53: //接收数据的缓冲区初始化
54: memset(recv_buf,0,sizeof(recv_buf));
55: if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0)
56: {
57: printf("Failed to load Winsock.\n");
58: return;
59: }
60: char map[10][20];
61: for(int i = 0;i < 10;i++)
62: for(int j = 0;j < 20;j++)
63: map[i][j] = 1;
64:
65: map[0][0] = 0; // for test
66: map[0][1] = 0;
67: map[0][2] = 0;
68: //map[0][1] = 0;
69: //for(int i = 0;i < 10;i++)
70: // for(int j = 0;j < 20;j++)
71: // sendData.obs[i][j] = map[i][j]; //那时候想着把二维数组封装在结构体里面,然后将结构体作为一个对象,通过UDP发送过去。
72: //后来发现完全没必要,数组本身我们也可以理解为一个对象,直接发送即可。
73: //建立服务器端地址
74: ser.sin_family=AF_INET;
75: ser.sin_port=htons(iPort);
76: ser.sin_addr.s_addr=inet_addr("127.0.0.1");
77: //建立客户端数据报套接口
78: sClient=socket(AF_INET,SOCK_DGRAM,0);
79: long k=0;
80: while (1)
81: {
82: if(sClient==INVALID_SOCKET)
83: {
84: printf("socket()Failed:%d\n",WSAGetLastError());
85: return;
86: }
87: //向服务器发送数据
88: Sleep(5);//暂停一秒
89: iSend=sendto(sClient,(char*)&map,sizeof(map),0,(struct sockaddr*)&ser,iLen);
90: k=k+1;
91: if(iSend==SOCKET_ERROR)
92: {
93: printf("sendto()Failed:%d\n",WSAGetLastError());
94: return;
95: }
96: else if(iSend==0)
97: return;
98: else
99: printf("sendto()succeeded. have sent %d times \n",k);
100:
101: //从服务器接收数据
102: //iRecv=recvfrom(sClient,recv_buf,sizeof(recv_buf),0,(struct sockaddr*)&ser,&iLen);
103: //if(iRecv==SOCKET_ERROR)
104: //{
105: // printf("recvfrom()Failed.:%d\n",WSAGetLastError());
106: // return;
107: //}
108: //else if(iRecv==0)
109: // return;
110: //else
111: //{
112: // //显示从服务器收到的信息
113: // printf("recvfrom():%s\n",recv_buf);
114: // printf("---------------------------\n");
115: //}
116:
117: }
118: closesocket(sClient);
119: WSACleanup();
120: }
UDP通信接收端,接收二维数组,内容为0与1的更多相关文章
- 【2048小游戏】——原生js爬坑之遍历算法显示二维数组内容
引言:做2048小游戏会将横纵方向的数字内容,存储在一个二维数组中,要将这个二维数组中的内容显示在页面上,就一定要用遍历算法来实现了. 一.二维数组存储 首先考虑用二维数组存储所有行数,列数 ...
- C语言基础--二维数组
二维数组概念: 数组中的每一个元素又是一个数组, 那么这个数组就称之为二维数组,二维数组是特殊的一维数组. 二维数组格式: 元素类型 数组名称[一维数组的个数][每个一维数组的元素个数]; 元素类型 ...
- postman传数组参数,二维数组,多维数组
一维数组: 传递: 接收: 二维数组: 传递: 接收: 依此类推,
- C++入门经典-例6.13-指针与二维数组
1:代码如下: // 6.13.cpp : 定义控制台应用程序的入口点. // #include"stdafx.h" #include<iostream> using ...
- C语言动态生成二维数组
# 动态创建二维数组示例 #include "stdlib.h" #include "stdio.h" #include <malloc.h> in ...
- PHP学习笔记十三【二维数组】
<?php //二维数组 $arr=array(array(1,2,3),array(4,5,6)); $arr1[0]=array(12,34,65); $arr1[1]=array(34,6 ...
- 《Java大学教程》—第16章 二维数组
多维(Multi-dimensional)数组维数由索引个数决定.常用的数组:一维(one-dimensional)数组.二维(two-dimensional)数组 16.2 创建二维数组索引从 ...
- JavaSE-06 二维数组
学习要点 二维数组的定义 二维数组内存数据结构 不规则二维数组 二维数组的定义 语法格式 格式一 数据类型[][] 数组名 = new 数据类型[m][n]; m:表示这个二维数组有多少个一维数组. ...
- JAVA描述算法和数据结构(01):稀疏数组和二维数组转换
本文源码:GitHub·点这里 || GitEE·点这里 一.基本简介 1.基础概念 在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵:与之相反, ...
随机推荐
- 【bzoj4810】[Ynoi2017]由乃的玉米田 莫队算法+STL-bitset
题目描述 由乃在自己的农田边散步,她突然发现田里的一排玉米非常的不美.这排玉米一共有N株,它们的高度参差不齐. 由乃认为玉米田不美,所以她决定出个数据结构题 这个题是这样的: 给你一个序列a,长度为n ...
- web标准,可用性和可访问性
web标准,简单的说,是指html,css,JavaScript三者的分离. 网页由三部分组成:结构,表现和行为.对应的标准分为三方面: 1.结构化标准语言XHTML和XML2.表现标准语言主要包括c ...
- Bridges
Bridges 题目描述 YYD为了减肥,他来到了瘦海,这是一个巨大的海,海中有n个小岛,小岛之间有m座桥连接,两个小岛之间不会有两座桥,并且从一个小岛可以到另外任意一个小岛.现在YYD想骑单车从小岛 ...
- java的图像界面
package test; import java.awt.FlowLayout; import java.awt.event.ActionListener; import java.awt.even ...
- (二) Spring项目的搭建
传统的项目搭建,是将所依赖的第三方jar包复制到项目的类路径下.但是,这样带来的问题是,无法更好的对这些jar包进行动态管理. 目前主流的构建工具有:Ant.Maven.Gradle.以Maven为例 ...
- python 集合比较(交集、并集,差集)
python的set和其他语言类似, 是一个无序不重复元素集, 基本功能包括关系测试和消除重复元素. 集合对象还支持union(联合), intersection(交), difference(差)和 ...
- [Oracle] 某游戏大区DB IO负载过高分析
某游戏大区DB IO负载过高分析 [问题] 下图信息看出机器IO负载过高, IO使用率: 平均值 50%, 峰值 98%, 业务高峰时间段(19:00-22:00)IO使用率持续80%以上. [分析] ...
- 解决IE6的PNG透明
http://www.jb51.net/article/35669.htm http://blog.csdn.net/mosliang/article/details/6760028
- (2)JavaScript基础2
一.操作符 1.一元操作符 自加自减操作符 前置型 执行前置递增和递减操作时,变量的值都是在语句被求值以前改变的 var num1 = 2; var num2 = 20; var num3 = --n ...
- 给定n个数字,问能否使这些数字相加得到h【折半查找/DFS】
A Math game Time Limit: 2000/1000MS (Java/Others) Memory Limit: 256000/128000KB (Java/Others) Submit ...