Tag: 客户端

bio_do_connect()返回-1

我正在尝试编写如下图所示的服务器/客户端应用程序。 issueTicket.cgi是一个用C编写的可执行文件。我的同事设置了apache并编写了issueTicket.cgi,我可以通过输入http:// [ubuntuIP] /cgi-bin/SEC_IssueTicket.cgi来访问issueTicket.cgi我的浏览器。 问题出在客户方面。 我必须使用Openssl在Windows上编写一个askTicket.exe,并且BIO_do_connect()始终返回-1。 以下是我的代码。 SSL_load_error_strings(); ERR_load_BIO_strings(); SSL_library_init(); /* Return value is always 1 */ OpenSSL_add_all_algorithms(); … *sslCtx = SSL_CTX_new(TLSv1_1_client_method()); sslRet = SSL_CTX_load_verify_locations(*sslCtx, (const char *)certpath, NULL); *sbio = BIO_new_ssl_connect(*sslCtx); BIO_set_conn_hostname(*sbio, “[ubuntuIP]:80/cgi-bin/issueTicket.cgi”); BIO_set_nbio(*sbio, 1); BIO_get_ssl(*sbio, &ssl); SSL_set_mode(ssl, SSL_MODE_AUTO_RETRY); BIO_do_connect(*sbio) // always return -1 任何人都可以告诉我的问题在哪里?

初学者的C语言编程

我刚刚开始学习套接字编程,我发现它非常有趣。 目前我在同一台计算机上制作服务器和客户端,因此我可以将ip地址作为环回地址,127.0.0.1,一切似乎工作正常! 但是现在我想要有两台电脑并做这件事……我有以下问题 – 1)说一台电脑是服务器而另一台是客户端。 现在,如果服务器代码驻留在服务器计算机上,客户端代码应该驻留在客户端上吗? 2)在我们为bind()提供ip地址的服务器代码中,它应该是我们可以通过ipconfig找到的系统的ip地址,还是应该仍然是环回地址? 3)在客户端代码中,我猜目的地的IP地址应该是服务器计算机的IP地址吗? 4)最后也是最重要的事情,我如何连接两台计算机? 我附加了我开始使用的简单服务器和客户端消息传递代码。 请引导我完成我需要做出的改变.. 服务器代码 #include #include #include #include #include #include #define MYPORT 3500 int main() { int sockfd; int clientfd; int bytes_read; char buf[100]; int struct_size; struct sockaddr_in my_addr; struct sockaddr_in con_addr; sockfd = socket(AF_INET, SOCK_STREAM, 0); my_addr.sin_family = AF_INET; my_addr.sin_port = htons(MYPORT); my_addr.sin_addr.s_addr = inet_addr(“127.0.0.1”); my_addr.sin_zero[8]=’\0′; […]

在客户端上使用select(..)

我正在尝试在客户端实现select(..),从服务器创建除TCP套接字到recv(..)之外的多个套接字。 我想接收使用select(..)创建的不同套接字的不同recv(..)的数据。 代码似乎没有按预期运行。 请帮忙。 谢谢! #include #include #include #include #include #include #include #include #include int main(int argc, char *argv[]) { int count, createsocket, chunks, newsocket[5], i; int bufsize = 2048; char *buffer = malloc(bufsize); char fname[256]; struct sockaddr_in address; fd_set master; fd_set read_fds; int fdmax, j; FD_ZERO(&master); FD_ZERO(&read_fds); if((createsocket = socket(AF_INET, SOCK_STREAM, 0)) > 0) […]

冒泡在c中动态创建结构数组

在这里真的很新,很抱歉任何进一步的错误..我有一些新的学校项目(学习C),我必须使用套接字连接到服务器,而不是从服务器下载所有代码行。 在那之后,我需要对行进行排序,使它们按顺序排列,我得到的就是排序……好吧我已经下载了代码行,将它们保存在struct array中但是现在我的冒泡排序显示了一些错误给了我而我没有知道什么是问题.. thx任何帮助。 typedef struct DATA{ char* buf; }DATA; // this fucntion creates a socket. void sort_array(DATA *to_sort, int len){ int i, j; char tmp[1024] = “”; for (i = 0; i < len – 1; i++){ for (j = 0; j < len – i – 1; j++){ if (strcmp(to_sort[j].buf, to_sort[j + 1].buf) […]

用于TFTP的C超时实现

我试图在我的TFTP实现中实现超时机制,我正在寻找一些一般的帮助。 我想知道的是如何管理超时情况。 我使用的过早超时机制是信号/报警function,但不知怎的,我陷入了如何处理我的超时,即如果丢失数据包(ack或数据)并且发生超时如何发回以前的数据包或确认服务器。

我可以使用单个websocket服务器同时打开2个端口

我是websocket编程的新手。 目前我正在使用一个简单的websocket服务器,使用c,可以响应websocket客户端。 我设法在一个端口上使用1个客户端和1个服务器。 我想知道我是否可以打开2个端口,因此不同的客户端可以连接到不同的端口。 #include #include #include #include #include #include #include #include #include #include int main(int argc, char *argv[]) { int listenfd = 0, connfd = 0; struct sockaddr_in serv_addr; char sendBuff[1025]; listenfd = socket(AF_INET, SOCK_STREAM, 0); memset(&serv_addr, ‘0’, sizeof(serv_addr)); memset(sendBuff, ‘0’, sizeof(sendBuff)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = htonl(INADDR_ANY ); serv_addr.sin_port = htons(8000); bind(listenfd, (struct […]

C,套接字编程:使用select()将多个客户端连接到服务器

我正在尝试制作一个可以由多个客户端连接的服务器。 到目前为止,这是我的代码: 客户: int main(int argc, char **argv) { struct sockaddr_in servaddr; int sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (sock == -1) perror(“Socket”); bzero((void *) &servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(6782); servaddr.sin_addr.s_addr = inet_addr(); if (-1 == connect(sock, (struct sockaddr *)&servaddr, sizeof(servaddr))) perror(“Connect”); while(1) { char message[6]; fgets(message, 6, stdin); message[5] = ‘\0’; […]

如何让python服务器将recvline转换为字符串?

如何将客户端的输入从服务器转换为字符串或其他一些数据类型。 我的服务器可以从客户端打印recvline,但不会将其识别为常见数据类型… void timing() { for (long i = 0; i < 200000000; i ++){ printf(""); } } int main(int argc, char **argv){ int i; int sockfd; struct sockaddr_in servaddr; char sendline[MAXLINE]; char recvline[MAXLINE]; time_t start, finish, final; start = clock(); timing(); // a function that takes a differential time based on the client finish […]

UDP和套接字,recvfrom()返回-1,资源暂时不可用

我有一个客户端和一个服务器与C中的数据报(UDP)通信。客户端发送5个消息,并在收到消息后,服务器发回消息。 在客户端完成接收消息之前,接收和发送消息是很好的。 服务器发回所有消息后,它将使用close()终止。 所以来自客户端的recvfrom()应该返回0,对吗? 假设recvfrom()应该在服务器端close()时返回0,它返回-1,而错误资源暂时不可用。 此资源是否是从服务器关闭套接字的引用? 或者它是否与完全不同的东西完全不同,如用完缓冲区或其他东西(我认为不是这样)? 假设我的假设是错误的,并且由于服务器终止而返回-1,我可能应该处理错误 if(SOMEMACRO) do something 我怎样才能知道SOMEMACRO是什么? 我打印出错误,但它说资源临时不可用,recvfrom()描述没有提到无法使用的资源..? 顺便说一句,这是一个非阻塞套接字,如果这有任何区别,因为我读到如果设置O_NONBLOCK并且没有可用的消息,它会将errno设置为EAGAIN或EWOULDBLOCK。 O_NONBLOCK未设置但MSG_DONTWAIT已设置。 它们与一般文件描述符的O_NONBLOCK基本相同,而MSG_DONTWAIT是否是特定于套接字的? 我的大脑现在没有那么好用,如果有人可以启发我并澄清我的困惑,我会深深体会到这一点。 谢谢!