基于UDP协议的信息传输

原创 2015年07月09日 17:20:13


这是简单的客户端到服务端的信息传输,目前只支持一传一回

客户端代码:

//chang. exercise of UDP socket.  
// Implements the function of send info between server and client.  
//When this server is listening and a client send an request, it's will print the info on the cmd and reply a data:"OK".  
//client.  
#include "Winsock2.h"  
#include "iostream"  
#include "stdio.h"  
#pragma comment(lib, "ws2_32.lib")   
#define HOST_IP "222.196.200.135"  
#define HOST_PORT 8080   
void main(){  
    //the version bit of Winsock  
    int version_a = 1;//low bit  
    int version_b = 1;//high bit  
 
    //makeword  
    WORD versionRequest = MAKEWORD(version_a,version_b);  
    WSAData wsaData;  
    int error;  
    error = WSAStartup(versionRequest, &wsaData);    
    if(error != 0   ){  
        printf("ERROR!");  
        return;  
    }  
    //check whether the version is 1.1, if not print the error and cleanup wsa?  
    if (LOBYTE(wsaData.wVersion)  != 1 || HIBYTE(wsaData.wVersion) != 1)  
    {  
        printf("WRONG WINSOCK VERSION!");  
        WSACleanup();  
        return;  
    }  
 
 
    //request info obtained by user's input  
    char requestStr[100];  
 
    //build a sockeet   
    SOCKET socClient = socket(AF_INET, SOCK_DGRAM, 0);  
    SOCKADDR_IN addrSrv;        // a instance of SOCKADDR_IN, which is used in format of SOCKADDR.  
    addrSrv.sin_addr.S_un.S_addr=inet_addr("222.196.200.135");        //set the host IP  
    addrSrv.sin_family=AF_INET;     //set the protocol family  
    addrSrv.sin_port=htons(HOST_PORT);      //set the port number  
 
    // array to store the data that server feedback.  
    char cRecvBuf[100];  
  int len=sizeof(SOCKADDR);  
 
    //while   
    while(true){  
	fflush(stdin);
            // gain info that user input    
	gets(requestStr);
        //sendto function is used to send programe data to the server  
       sendto(socClient, requestStr, strlen(requestStr)+1, 0, (SOCKADDR*) &addrSrv, sizeof(SOCKADDR));  
 
        //receive the feedback info from server  
        //recv function is used in client.  
        //recv(socClient, cRecvBuf, strlen(cRecvBuf)+1, 0); 
	recvfrom(socClient, cRecvBuf, 100, 0,  (SOCKADDR*) &addrSrv, &len); 
        //output the cRecvBuf to cmd  
        std::cout<< cRecvBuf << std::endl;  
    }  
      
    //close the socket and cleanup the wsadata  
    closesocket(socClient);  
    WSACleanup();  
 
//  return 0;  
} 

服务端:

//chang. exercise of UDP socket.  
// Implements the function of send info between server and client.  
//When this server is listening and a client send an request, it's will print the info on the cmd and reply a data:"OK".  
//server.  
#include "stdio.h"  
#include "Winsock2.h"  
#include "iostream"  
#include "string"  
//should add the under line if not add lib in the project.(appendicular dependent)  
#pragma comment(lib, "ws2_32.lib")   
//define host IP and usable port.  
//#define HOST_IP 127.0.0.1  
#define HOST_IP 222.196.200.135 
#define HOST_PORT 8080  
#define OK_STR "OK"   
void main(){  
    //the version bit of Winsock  
    int version_a = 1;//low bit  
    int version_b = 1;//high bit  
 
    //makeword  
    WORD versionRequest = MAKEWORD(version_a,version_b);  
    WSAData wsaData;  
    int err;  
    //wsa startup  
    err = WSAStartup(versionRequest, &wsaData);    
    if(err != 0 ){  
        printf("ERROR!");  
        return;  
    }  
    //check whether the version is 1.1, if not print the error and cleanup wsa?  
    if (LOBYTE(wsaData.wVersion)  != 1 || HIBYTE(wsaData.wVersion) != 1)  
    {  
        printf("WRONG WINSOCK VERSION!");  
        WSACleanup();  
        return;  
    }  
 
    /*  
    *build the socket  
    *first param is protocol family, generally AF_INET for IP internet.  
    *second param is type of socket, SOCK_DGRAM is for Data Gram(UDP), and SOCK_STREAM is for TCP.  
    *the last param is communicate protocol. Generally is zero.  
    */ 
    SOCKET socServer = socket(AF_INET, SOCK_DGRAM,0);  
    //infomation of address, always NOT being operated directly.  
    SOCKADDR_IN addr_Srv;  
    //Struct sin_addr is  used to defind IP address,  it's a property of addr_in.  
    //It's nest three structs as S_un_b, S_un_w and S-un.(union)  
    addr_Srv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);  
    //set protocol family  
    addr_Srv.sin_family = AF_INET;  
    //set host port  
    addr_Srv.sin_port = htons(HOST_PORT);  
     //bind socket to  the host  
    bind(socServer,( SOCKADDR*) &addr_Srv, sizeof(SOCKADDR));  
 
    //address  of a client  
    SOCKADDR_IN addr_Clt;  
    char recvBuf[100];  
 	char words[100];
    int fromlen = sizeof(SOCKADDR);  
    // while() to listen all the time  
    while(true){  
	fflush(stdin);
        //receive data function of server  
        recvfrom(socServer, recvBuf, 100, 0,  (SOCKADDR*) &addr_Clt, &fromlen);  
        //output the data received to cmd  
        std::cout<<recvBuf<<std::endl;  
        //send "OK" to the from_client to indicates that data have been received.  
        //send function is used by server, while sendto function is used by client. NOT sure.  
//      send(addr_Clt, OK_STR,  strlen(OK_STR)+1, 0);  
	gets(words);
        sendto(socServer, words, strlen(words)+1, 0, (SOCKADDR*)&addr_Clt, sizeof(SOCKADDR));  
    }  
      
    // at last close the socket.  
    closesocket(socServer);  
    //cleanup WSAData  
    WSACleanup();} 


版权声明:本文为博主原创文章,未经博主允许不得转载。

TCP是流传输协议,UDP是包传输协议

你可能需要理解这句话:TCP是流传输协议,UDP是包传输协议。 1:什么是流传输协议? 打个比方,发送方一次或分多次send了“1234,567,890,abc....”这些数据,接收方每次rec...
  • e_wsq
  • e_wsq
  • 2013年10月20日 00:19
  • 1622

ude协议—基于udp的全双工可靠传输协议

ude是一款基于udp的可靠传输协议,专门用于在数据传输方面对实时性要求较高的应用领域。...
  • xieyu2885
  • xieyu2885
  • 2017年10月20日 15:46
  • 2068

基于UDP协议的文件传输

客户端将本地文件传输给服务端,服务端接收文件并保存,输出文件名和内容 客户端: #include #include #include #pragma comment(lib,"ws2_32.lib...
  • a262624
  • a262624
  • 2015年07月09日 17:24
  • 747

基于UDP的用于视频应用的几个协议

TCP由于其协议为保证可靠性,如三次握手,导致其比较慢,不能支持交互视频,会议等实时服务。UDP虽然是一个不可靠协议,不支持丢包重传,但是UDP可以根据端口号对应用程序进行多路复用,并能利用校验和检查...
  • u014571011
  • u014571011
  • 2016年11月09日 21:41
  • 822

java使用UDP协议传输数据

UDP协议(User Datagram Protocol,用户数据报协议)不同于TCP协议,它是不可能靠的,但是它比TCP协议具有更快的传输速度,UDP发送的数据单元称为数据报,当网络传输UDP传输U...
  • awj3584
  • awj3584
  • 2014年04月29日 14:45
  • 6910

一种基于UDP的可靠传输协议

一种基于UDP的可靠传输协议 摘要:传统的UDP协议通信效率高、可靠性较差,不适合对可靠性要求较高的应 用环境。目前随着网络传输的快速发展,某些应用场合需要在保证高效性的基础上...
  • fghydx
  • fghydx
  • 2014年03月25日 17:42
  • 1311

传输层协议TCP与UDP的详细阐述与比较

TCP/IP是普遍使用的网络互连标准协议,可在不同环境和不同节点之间进行彼此通信,是连入Internet的所有计算机在网络上进行各种信息交换和传输所必须采用的协议,也是Windows NT、Windo...
  • u011730649
  • u011730649
  • 2015年03月16日 14:59
  • 1472

基于UDP协议的简单基本视频传输程序的编写

一、UDP协议 UDP是User Datagram Protocol的简称,中文名是用户数据报协议,是OSI参考模型中一种无连接的传输层协议。正式通信前不必与对方先建立连接,直接向接收方发送数据,是一...
  • jhh_move_on
  • jhh_move_on
  • 2013年06月18日 10:57
  • 18844

利用UDP协议进行图像传输

由于项目需要,自己实现了UPD协议下图像的快速无丢失传输,测试数据是Egtest01图像库,实现了PC和嵌入式端的图像传输,传输+读写的速度可以实现10+M/S。 服务器端程序 #include ...
  • StefanSalvatore
  • StefanSalvatore
  • 2017年02月27日 21:37
  • 1488

基于TCP的协议,基于UDP的协议

TCP与UDP区别 TCP---传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复...
  • u014082714
  • u014082714
  • 2015年04月11日 13:32
  • 2309
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:基于UDP协议的信息传输
举报原因:
原因补充:

(最多只允许输入30个字)