首页 > 解决方案 > 仅使用客户端临时端口向网络服务器发送消息

问题描述

我想在不实际发送任何数据的情况下向服务器发送消息。
例如,指定客户端临时端口 7273(在 ASCII 中为HI )

你好

使用端口7279、8732、6582、6932、8979、8563连续连接将传输你好吗?

服务器只接受连接并使用以下 C 代码打印客户端端口:

// Accept a client socket
struct sockaddr_in client_addr;
socklen_t slen = sizeof(client_addr);
ClientSocket = accept(ListenSocket, (struct sockaddr*)&client_addr, &slen);
printf("SECRET: %u\n", ntohs(client_addr.sin_port));

问题:是否可以指定Windows客户端临时端口?

编辑:根据评论,我调整了建议的 linux客户端
以在 Windows 上运行,它现在可以工作了!

#define WIN32_LEAN_AND_MEAN

#include <windows.h>
#include <winsock2.h>
#include <ws2tcpip.h>
#include <stdlib.h>
#include <stdio.h>


// Need to link with Ws2_32.lib, Mswsock.lib, and Advapi32.lib
#pragma comment (lib, "Ws2_32.lib")
#pragma comment (lib, "Mswsock.lib")
#pragma comment (lib, "AdvApi32.lib")

#pragma warning(disable : 4996)


int __cdecl main(int argc, char** argv)
{
    WSADATA wsaData;
    SOCKET ConnectSocket = INVALID_SOCKET;
   
    // Initialize Winsock
    WSAStartup(MAKEWORD(2, 2), &wsaData);

    // Two buffer are for message communication
    char buffer1[256], buffer2[256];
    struct sockaddr_in my_addr, my_addr1;
    int client = socket(AF_INET, SOCK_STREAM, 0);
    if (client < 0)
        printf("Error in client creating\n");
    else
        printf("Client Created\n");

    my_addr.sin_family = AF_INET;
    my_addr.sin_addr.s_addr = INADDR_ANY;
    my_addr.sin_port = htons(27015);

    // This ip address will change according to the machine
    my_addr.sin_addr.s_addr = inet_addr("127.0.0.1");

    // Explicitly assigning port number 7273 by 
    // binding client with that port 
    my_addr1.sin_family = AF_INET;
    my_addr1.sin_addr.s_addr = INADDR_ANY;
    my_addr1.sin_port = htons(7273);

    // This ip address will change according to the machine
    my_addr1.sin_addr.s_addr = inet_addr("127.0.0.1");
    if (bind(client, (struct sockaddr*)&my_addr1, sizeof(struct sockaddr_in)) == 0)
        printf("Binded Correctly\n");
    else
        printf("Unable to bind\n");

    socklen_t addr_size = sizeof my_addr;
    int con = connect(client, (struct sockaddr*)&my_addr, sizeof my_addr);
    if (con == 0)
        printf("Client Connected\n");
    else
        printf("Error in Connection\n");

    return 0;

}

客户端/服务器输出是

绑定

标签: cwindowsport

解决方案


推荐阅读