socket编程在linux下由c

socket编程在linux下由c,第1张

概述socket编程在linux下由c

我在套接字编程中遇到错误。 bind()函数执行后会挂起。 这里是代码:

int socket_rcv,new_socket; struct sockaddr_in add1,add2; int test[100]; buffer= test; printf("n Initializing Socket...."); socket_rcv = socket(AF_INET,SOCK_STREAM,0); if(socket_rcv == -1) { perror("Socket not created.Error:"); return 1; } printf("n Socket created"); add1.sin_family = AF_INET; add1.sin_addr.s_addr = htonl(INADDR_ANY); add1.sin_port = htons(port_num); if((socket_rcv = bind(socket_rcv,(struct sockaddr*)&add1,sizeof(add1))) == -1) { perror("binding Failed. Error:"); return 1; } printf("n Bind completed"); if(Listen(socket_rcv,10) == -1) { perror("Listen Failed.Error:"); return 1; } socklen_t sizes = sizeof(add2); printf("n Waiting for connection....."); new_socket = accept(socket_rcv,(struct sockaddr*) &add2,&sizes); if(new_socket != -1) { printf("n %d,Accepted",new_socket); if(recv(new_socket,(char*)buffer,100,1)<0) { printf("n No data received from %d socket",new_socket); return 1; } printf("n Data Receivedn"); } else { perror("Accept Failed. Error:"); return 1; } close(new_socket); close(socket_rcv); return 0;

我的问题是执行这个代码的时候,它会在bind()函数后挂起。 最后显示的行是“Bind Completed”,之后会挂起。 SO在bind()函数中有问题吗?

在C ++中,可以从dynamic库中访问一个外部定义的全局variables吗?

正确的方法来testing文件夹的可读性/可写性

pthread_mutex_timedlock不超时

如何在C中执行bash命令并检索输出?

用户进程内存映射 – 是BSS部分总是相同的大小?

在你可以接受来自套接字的连接之前,你必须做三件事情:

使用socket函数创建socket 。 从评论你似乎做正确的。

将套接字绑定到具有bind功能的地址。 这告诉系统您正在接受连接的地址。 从评论看来,你也正确地做到了这一点。

使用Listen函数将套接字标记为“被动”。 这告诉系统该套接字将被用来接受传入的连接。

这是一个完整的程序,显示了接受连接的所有步骤。

#include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <stdio.h> int main(voID) { int server_fd; struct sockaddr_in server_addr; server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); server_addr.sin_port = htons(8080); if ((server_fd = socket(PF_INET,0)) == -1) { perror("socket"); return 1; } if (bind(server_fd,(struct sockaddr*) &server_addr,sizeof(server_addr)) == -1) { perror("bind"); return 1; } if (Listen(server_fd,10) == -1) { perror("Listen"); return 1; } struct sockaddr_in clIEnt_addr; socklen_t clIEnt_addrlen = sizeof(clIEnt_addr); int clIEnt_fd = accept(server_fd,(struct sockaddr*) &clIEnt_addr,&clIEnt_addrlen); if (clIEnt_fd == -1) { perror("accept"); return 1; } puts("Connection accepted"); close(clIEnt_fd); close(server_fd); }

所有我上传工作代码,我得到的所有错误得到解决。

if((bind(socket_rcv,sizeof(add1))) == -1) { perror("binding Failed. Error:"); return 1; } printf("n Bind completed");

谢谢大家

只是一个FYI,解决这个问题的另一种方法可能是在tcpclIEnt下运行你的C程序 – 即tcpclIEnt会产生你的程序并打开一个到服务器的tcp连接,并将你的程序的标准输出到服务器,并从服务器输出管道到你的程序的标准输入。 这样做的好处在于,你可以让tcpclIEnt尽可能地把所有重要的东西放在套接字等等处,而且你可以把精力集中在程序的核心功能上。 有关更多信息,请参阅http://cr.yp.to/ucspi-tcp/tcpclIEnt.HTML 。

总结

以上是内存溢出为你收集整理的socket编程在linux下由c全部内容,希望文章能够帮你解决socket编程在linux下由c所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1281748.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-09
下一篇2022-06-09

发表评论

登录后才能评论

评论列表(0条)

    保存