UDP协议的数据传输
2016-05-18 11:22
387 查看
UDP,TCP协议是典型的网络通信协议,本文采用C语言实现数据的UDP传输。
以下为C代码
客户端实现:
以下为C代码
客户端实现:
// sender.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <Winsock2.h> #pragma comment(lib,"ws2_32") #include <stdio.h> #define PORT 1129 #define ADDRESS "192.168.1.110" struct CarTemp { float Latitude; float Longitude; float Altitude; float VelocityNorth; float VelocityEast; float VelocityDown; float Heading; }gps; int main() { gps.Latitude=120.11; gps.Longitude=36.23; gps.Altitude=22.30; gps.VelocityNorth=16.31; gps.VelocityEast=8.12; gps.VelocityDown=0.36; gps.Heading=0.69; //加载winsock库 WSADATA wsaData; WORD sockVersion = MAKEWORD(2,2); if(WSAStartup(sockVersion,&wsaData)!=0) return 0; //创建套接字 SOCKET sClient = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if(sClient==INVALID_SOCKET) { printf("socket error\n"); return 0; } //socket中装入远程地址信息 SOCKADDR_IN remote; remote.sin_family = AF_INET; remote.sin_port = htons(1129); remote.sin_addr.S_un.S_addr = inet_addr(ADDRESS); if(connect(sClient,(SOCKADDR *)&remote,sizeof(SOCKADDR))==SOCKET_ERROR) { printf("connect error\n"); closesocket(sClient); return 0; } while(true) { char SendData[7]; int i,ch; send(sClient,(char*)(&gps),sizeof(gps),0); } closesocket(sClient); WSACleanup(); return 0; }服务端实现:
#include "stdafx.h" #include <Winsock2.h> #pragma comment(lib,"ws2_32") #include <stdio.h> //#include <iostream.h> struct CarTemp { float Latitude; float Longitude; float Altitude; float VelocityNorth; float VelocityEast; float VelocityDown; float Heading; }gpss; int main(int argc,char *[]) { //gpss info; //加载winsock库 WSADATA wsaData; WORD sockVersion = MAKEWORD(2,2); if(WSAStartup(sockVersion,&wsaData)!=0) return 0; //创建套接字 SOCKET sServer = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if(sServer==INVALID_SOCKET) { printf("socket error\n"); return 0; } //socket中装入地址信息 sockaddr_in sin; sin.sin_family = AF_INET; sin.sin_port = htons(1129); sin.sin_addr.S_un.S_addr = INADDR_ANY; //bind套接字 if(bind(sServer,(LPSOCKADDR)&sin,sizeof(sin)) == SOCKET_ERROR) { printf("bind error!\n"); return 0; } //listen模式 if(listen(sServer,5) == SOCKET_ERROR) { printf("listen error!\n"); closesocket(sServer); return 0; } //循环接受连接请求 sockaddr_in remoteAddr; SOCKET sClient; int nAddrLen=sizeof(SOCKADDR_IN); char revData[7]; while(1) { sClient = accept (sServer,(SOCKADDR*)&remoteAddr,&nAddrLen); if(sClient==INVALID_SOCKET) { printf("accept error\n"); continue; } printf("接受来自%s的连接.\n",inet_ntoa(remoteAddr.sin_addr)); while(true) { //int ret = recv(sClient,revData,7,0); int ret = recv(sClient, (char*)(&gpss), sizeof(gpss),0); if(ret==0||(ret==SOCKET_ERROR&&WSAGetLastError()==WSAECONNRESET)) { printf("%s关闭连接\n",inet_ntoa(remoteAddr.sin_addr)); closesocket(sClient); break; } else { revData[ret]='\0'; FILE* fp1 = fopen("D:\\2.txt","a"); printf("%f,%f,%f", gpss.Altitude,gpss.Longitude,gpss.Latitude); if(fp1==NULL) return 1; fprintf(fp1,"%f,%f,%f,%f,%f,%f,%f\n",gpss.Longitude,gpss.Latitude,gpss.Altitude,gpss.VelocityNorth,gpss.VelocityEast,gpss.VelocityDown,gpss.Heading); //fwrite(revData, sizeof(char)*10, 1, fp1); //fputc('\x0D', fp1); // fputc('\x0A', fp1); fclose(fp1); } } } closesocket(sServer); WSACleanup(); return 0; }
相关文章推荐
- Android获取WIFI状态下的IP地址以及MAC地址
- 近期知识计划
- Android中的Application类
- iOS开发之版本控制(SVN)
- SOA架构模式
- UITextField设置不可编辑
- Github站点搭建 gh-pages
- 微博营销2——赢利模式之资讯中心
- java实现身份证有效性验证
- 学习小记 bootstrap datetimepicker
- 一个非常简单的知识点
- Android引用方式
- Rxjava操作符学习博客
- hdu 1059 多重背包
- TCP/IP协议攻击实验1
- HTTP认证方式
- iPhone 查看UDID 方法
- SQL Server中nvarchar和varchar的区别
- 输入输出-总
- 0518Scrum项目5.0