c - 仅使用客户端临时端口向网络服务器发送消息
问题描述
我想在不实际发送任何数据的情况下向服务器发送消息。
例如,指定客户端临时端口 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;
}
客户端/服务器输出是
解决方案
推荐阅读
- python - 在 Python 类中定义和调用函数
- amazon-web-services - 基于 Apache Ignite AWS ELB 的发现 - LoadBalancerNotFoundException
- tfs - TFS Build 2018 with TFS 2015 Server,有可能吗?
- r - 在一张图上处理 2 个数据集时,如何在 ggplot 上获得图例?
- javascript - 检查元素是否包含特定的数据集项
- javascript - 为什么我不断收到“找不到模块 'socket.io'”?
- laravel - v-on:click 不使用数据表
- extjs - ExtJS -- grid rowwidget 插件在滚动时创建小部件
- ios - @interface 中的 Objective-c 特定 iOS 版本
- django - 在 django 模板文件中设置一个变量,并在迭代后更新它