Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;UDP客户端/套接字编程:can';不发送和接收_C++_Sockets_Bgi - Fatal编程技术网

C++ C++;UDP客户端/套接字编程:can';不发送和接收

C++ C++;UDP客户端/套接字编程:can';不发送和接收,c++,sockets,bgi,C++,Sockets,Bgi,第一次来这里。我正在尝试实现一个UDP套接字客户端/服务器,以便在大学考试中与BGI合作。我想发送移动坐标并接收测试字符。但是当我使用recvfrom()时,它不起作用,没有它也可以。对不起,我的英语不好 以下是客户端文件: #define WIN32_LEAN_AND_MEAN #include<winsock2.h> #include<windows.h> #include<string> #include<stdio.h> #include

第一次来这里。我正在尝试实现一个UDP套接字客户端/服务器,以便在大学考试中与BGI合作。我想发送移动坐标并接收测试字符。但是当我使用recvfrom()时,它不起作用,没有它也可以。对不起,我的英语不好

以下是客户端文件:

#define WIN32_LEAN_AND_MEAN

#include<winsock2.h>
#include<windows.h>
#include<string>
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<graphics.h>

#define SIZE 512
#define PORT 20252
#define SERVER_IP "127.0.0.1"
#define CLIENT_IP "127.0.0.1"

using namespace std;

int main() {
    WSADATA wsaData;
    SOCKET ClientSocket;
    int server_length;
    struct sockaddr_in server;
    struct sockaddr_in client;
    char print_buffer[SIZE];
    /* ==================================================================================*/
    WSAStartup(0x0101, &wsaData);
    ClientSocket = socket(AF_INET, SOCK_DGRAM, 0);
    memset((void *)&server, '\0', sizeof(struct sockaddr_in));
    memset((void *)&client, '\0', sizeof(struct sockaddr_in));
    server.sin_family      = AF_INET;
    server.sin_port        = htons(PORT);
    server.sin_addr.s_addr = inet_addr(SERVER_IP);
    client.sin_family      = AF_INET;
    client.sin_port        = htons(PORT);
    client.sin_addr.s_addr = inet_addr(CLIENT_IP);
    bind(ClientSocket, (struct sockaddr *)&client, sizeof(struct sockaddr_in));
    /* ==================================================================================*/

    int x = 0;

    while (x != 1) {
        server_length = sizeof(struct sockaddr_in);

        if (GetKeyState(VK_RIGHT)&0x80) {
            char send_right_P1[SIZE] = "P1RIGHT\r\n";
            sendto(ClientSocket, send_right_P1, (int)strlen(send_right_P1) + 1, 0, (struct sockaddr *)&server, server_length);
            memset(&send_right_P1[0], 0, sizeof(send_right_P1));
        }
        if (GetKeyState(VK_LEFT)&0x80) {
            char send_left_P1[SIZE]  = "P1LEFT\r\n";
            sendto(ClientSocket, send_left_P1, (int)strlen(send_left_P1) + 1, 0, (struct sockaddr *)&server, server_length);
            memset(&send_left_P1[0], 0, sizeof(send_left_P1));
        }
        if (GetKeyState(VK_UP)&0x80) {
            char send_up_P1[SIZE]    = "P1UP\r\n";
            sendto(ClientSocket, send_up_P1, (int)strlen(send_up_P1) + 1, 0, (struct sockaddr *)&server, server_length);
            memset(&send_up_P1[0], 0, sizeof(send_up_P1));
        }
        if (GetKeyState(VK_DOWN)&0x80) {
            char send_down_P1[SIZE]  = "P1DOWN\r\n";
            sendto(ClientSocket, send_down_P1, (int)strlen(send_down_P1) + 1, 0, (struct sockaddr *)&server, server_length);
            memset(&send_down_P1[0], 0, sizeof(send_down_P1));
        }
        if (GetKeyState(VK_ESCAPE)&0x80) {
            char send_escape[SIZE] = "ESCAPE\r\n";
            sendto(ClientSocket, send_escape, (int)strlen(send_escape) + 1, 0, (struct sockaddr *)&server, server_length);
            memset(&send_escape[0], 0, sizeof(send_escape));
        }

        recvfrom(ClientSocket, print_buffer, SIZE, 0, (struct sockaddr *)&server, &server_length);

        if (strcmp(print_buffer, "TESTE\r\n" ) == 0) {
            cout << print_buffer;
        } else cout << "Failed\n";

        memset(&print_buffer[0], 0, sizeof(print_buffer));

        delay(50);

    }

    closesocket(ClientSocket);
    WSACleanup();
    return 0;
}
#定义WIN32_LEAN_和_MEAN
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#定义大小512
#定义端口20252
#定义服务器IP“127.0.0.1”
#定义客户端IP“127.0.0.1”
使用名称空间std;
int main(){
WSADATA WSADATA;
插座客户端插座;
int服务器长度;
服务器中的结构sockaddr_;
客户端中的结构sockaddr_;
字符打印缓冲区[大小];
/* ==================================================================================*/
WSAStartup(0x0101和wsaData);
ClientSocket=socket(AF_INET,SOCK_DGRAM,0);
memset((void*)和服务器,'\0',sizeof(struct sockaddr_in));
memset((void*)和client,'\0',sizeof(struct sockaddr_in));
server.sinu family=AF\u INET;
server.sin_port=htons(端口);
server.sin\u addr.s\u addr=inet\u addr(服务器IP);
client.sinu family=AF\u INET;
client.sin_port=htons(port);
client.sin\u addr.s\u addr=inet\u addr(client\u IP);
绑定(ClientSocket,(struct sockaddr*)和client,sizeof(struct sockaddru in));
/* ==================================================================================*/
int x=0;
while(x!=1){
服务器长度=sizeof(结构sockaddr\u in);
if(GetKeyState(VK_RIGHT)&0x80){
char send_right_P1[SIZE]=“P1RIGHT\r\n”;
sendto(ClientSocket,send_right_P1,(int)strlen(send_right_P1)+1,0,(struct sockaddr*)&服务器,服务器长度);
memset(&send_right_P1[0],0,sizeof(send_right_P1));
}
if(GetKeyState(VK_左)&0x80){
char send_left_P1[SIZE]=“P1LEFT\r\n”;
sendto(ClientSocket,send_left_P1,(int)strlen(send_left_P1)+1,0,(struct sockaddr*)&服务器,服务器长度);
memset(&send_left_P1[0],0,sizeof(send_left_P1));
}
if(GetKeyState(VK_UP)&0x80){
char send\u up\u P1[SIZE]=“P1UP\r\n”;
sendto(ClientSocket,send_up_P1,(int)strlen(send_up_P1)+1,0,(struct sockaddr*)&服务器,服务器长度);
memset(&send_up_P1[0],0,sizeof(send_up_P1));
}
if(GetKeyState(VK_向下)&0x80){
char send_down_P1[SIZE]=“P1DOWN\r\n”;
sendto(ClientSocket,send_down_P1,(int)strlen(send_down_P1)+1,0,(struct sockaddr*)&服务器,服务器长度);
memset(&send_down_P1[0],0,sizeof(send_down_P1));
}
if(GetKeyState(VK_ESCAPE)&0x80){
char send_escape[SIZE]=“escape\r\n”;
sendto(ClientSocket,send_escape,(int)strlen(send_escape)+1,0,(struct sockaddr*)&服务器,服务器长度);
memset(&send_escape[0],0,sizeof(send_escape));
}
recvfrom(ClientSocket,打印缓冲区,大小,0,(struct sockaddr*)和服务器,以及服务器长度);
if(strcmp(打印缓冲区,“TESTE\r\n”)==0){
cout不
bind()
客户端上的套接字。将客户端套接字绑定到127.0.0.1:20252,然后将数据发送到同一地址:端口对

只需删除客户端代码中对
bind()
的调用

另一个选项(也在客户端上)是绑定到端口0,这将分配一个未使用的端口

另外:检查来自
bind()
sendto()
recvfrom()
等的返回值,如果失败,则显示错误代码

还有一个:调用前必须初始化
recvfrom()
的长度参数。例如,在客户端中,您应该执行以下操作:

server_length = sizeof(server);
recvfrom(ClientSocket, print_buffer, SIZE, 0, (struct sockaddr *)&server, &server_length);

同样,在服务器端。

尝试放置产生错误的最短源代码
server_length = sizeof(server);
recvfrom(ClientSocket, print_buffer, SIZE, 0, (struct sockaddr *)&server, &server_length);