gpt4 book ai didi

Windows客户端和Linux服务器之间的通信?

转载 作者:太空宇宙 更新时间:2023-11-04 11:12:39 25 4
gpt4 key购买 nike

我在 c 中执行客户端 (windows) 和服务器 (linux RT) 之间的通信。我已经为 windows 操作系统(一台笔记本电脑)编写了客户端代码,为 linux 操作系统(另一台笔记本电脑)编写了服务器代码。我通过以太网电缆连接两台笔记本电脑,并将它们配置在同一子网上。

服务器.c : Linux

#include <arpa/inet.h>
#include <netinet/in.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#define BUFLEN 512
#define PORT 9930

void err(char *str)
{
perror(str);
exit(1);
}

int main(void)
{
struct sockaddr_in my_addr, cli_addr;
int sockfd, i;
socklen_t slen=sizeof(cli_addr);
char buf[BUFLEN];

if ((sockfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP))==-1)
err("socket");
else
printf("Server : Socket() successful\n");

bzero(&my_addr, sizeof(my_addr));
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(PORT);
my_addr.sin_addr.s_addr = htonl(INADDR_ANY);

if (bind(sockfd, (struct sockaddr* ) &my_addr, sizeof(my_addr))==-1)
err("bind");
else
printf("Server : bind() successful\n");

while(1)
{
if (recvfrom(sockfd, buf, BUFLEN, 0, (struct sockaddr*)&cli_addr,

&slen)==-1)
err("recvfrom()");
printf("Received packet from %s:%d\nData: %s\n\n",
inet_ntoa(cli_addr.sin_addr), ntohs(cli_addr.sin_port), buf);
}

close(sockfd);
return 0;
}

CLIENT.c - 窗口

#pragma comment(lib, "Ws2_32.lib")

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <errno.h>
#include <time.h>
#include <winsock.h>
#include <io.h>
#define BUFLEN 512
#define PORT 9930

void err(char *str)
{
perror(str);
exit(1);
}

int main(void)
{
struct sockaddr_in my_addr, cli_addr;
int sockfd, i;
socklen_t slen=sizeof(cli_addr);
char buf[BUFLEN];
WORD wVersionRequested;
WSADATA wsaData;

printf("Initializing Winsock\n");
wVersionRequested = MAKEWORD (1, 1);
if (WSAStartup (wVersionRequested, &wsaData) != 0){
printf("Winsock initialised failed \n");
} else {
printf("Initialised\n");


if ((sockfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP))==-1)
err("socket");

bzero(&serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(PORT);
if (inet_aton(argv[1], &serv_addr.sin_addr)==0)
{
fprintf(stderr, "inet_aton() failed\n");
exit(1);
}


while(1)
{
printf("\nEnter data to send(Type exit and press enter to exit) : ");
scanf("%[^\n]",buf);
getchar();
if(strcmp(buf,"exit") == 0)
exit(0);

if (sendto(sockfd, buf, BUFLEN, 0, (struct sockaddr*)&serv_addr, slen)==-1)
err("sendto()");
}

close(sockfd);
return 0;

我的问题:

  • 是否可以进行这样的通信??
  • 我要为此采取具体措施吗??

请就此给出想法?

最佳答案

您可以直接连接两个系统(通过以太网电缆),但通常您必须为此使用特殊的电缆:它被称为“交叉电缆”。否则无法连接。

较新的网络 Controller 对此类设置进行检测,因此可以使用标准电缆进行此设置,但这取决于两个系统中内置的网络 Controller 。您将不得不尝试或查阅文档。

也可能您必须在 MS-Windows 端(在网络适配器配置内)选择一些特殊配置才能使其工作。我几次遇到标准设置的通信问题。您可以咨询谷歌这些设置。

关于Windows客户端和Linux服务器之间的通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22372131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com