键盘上狂欢

不过是一粒尘埃,哪有那么多的悲哀。

基于UDP协议的信息传输


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

客户端代码:

//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();} 


阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a262624/article/details/46819517
个人分类: c++ c
想对作者说点什么? 我来说一句

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

2016年04月30日 116KB 下载

基于UDP协议的视频传输

2013年01月03日 3.76MB 下载

基于udp的可靠文件传输

2013年11月12日 298KB 下载

没有更多推荐了,返回首页

不良信息举报

基于UDP协议的信息传输

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭