【发布时间】:2023-03-03 11:49:01
【问题描述】:
我是 Unix 网络的新手,我无法理解我的代码有什么问题。我已经研究了很多,从逻辑上讲,代码应该可以工作,但我现在正在拔头发。客户端连接调用不断抛出错误 - 将 errno 设置为 22。我不明白传递连接参数的方式有什么问题。
客户端代码是:
#include <netinet/in.h>
#include <sys/select.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <stdint.h>
#include <strings.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
int main(int argc, char *argv[])
{
char buffer[256];
uint32_t
serverip=; //ip goes here
struct sockaddr_in clientsock;
memset(&clientsock, 0, sizeof(clientsock));
clientsock.sin_family = AF_INET;
clientsock.sin_addr.s_addr = htonl(serverip);
clientsock.sin_port = htons((unsigned short) 5000);
socklen_t clientsocksize = sizeof(clientsock);
int clientfd = socket(AF_INET, SOCK_STREAM, 0);
int retval = -1;
retval = connect(clientfd, (struct sockaddr*) &clientsock,
sizeof(struct sockaddr_in));
while (1)
{
if (retval == -1)
{
printf("error while connecting...\n");
printf("error: %i\n", errno);
retval = connect(clientfd, (struct sockaddr*) &clientsock,
sizeof(struct sockaddr_in));
}
else if (retval == 0)
{
printf("connection returned: %i\n", retval);
printf("please enter data: ");
bzero((char *) &buffer, sizeof(buffer));
fgets(buffer, 255, stdin);
write(clientfd, buffer, sizeof(buffer));
}
else
{
printf("error in else: %i\n", errno);
}
}
}
任何指导和批评将不胜感激。
【问题讨论】:
-
他在什么时候抛出那个错误`?
-
您使用的是 INET 套接字,而不是 unix-sockets。
标签: c sockets tcp network-programming ip