Unix的交流电插座服务器不接受连接 [英] Unix C socket server not accepting connections
问题描述
这里的交易,我C语言编写一个简单的TCP套接字服务器(使用UNIX系统调用),我是不是能够得到接受连接。
从我可以告诉,我通过服务器初始化拿到就好了,但是当我尝试连接到我打印出来的端口(见$ C $以下三)拒绝就好像无所不有。
更重要的是,当我用netstat端口甚至没有使用。我不扔我目前设立任何错误,我都干涸了的想法。
INT的main(){ INT sock_fd;
INT conn_fd;
结构SOCKADDR_IN serv_addr;
结构SOCKADDR_IN cli_addr;
socklen_t的* serlen;
socklen_t的* clilen;
clilen =的malloc(sizeof的(socklen_t的));
serlen =的malloc(sizeof的(socklen_t的));
* serlen = sizeof的(serv_addr);
* clilen = sizeof的(cli_addr); / * =============================创建套接字================= ============ * /
//创建套接字
sock_fd =插座(AF_INET,SOCK_STREAM,0);
如果(sock_fd℃,){
fprintf中(标准错误,错误创建套接字\\ n);
出口(1);} //初始化服务器地址结构体
bzero((字符*)及serv_addr,* serlen);
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_port = 0; / * =============================绑定地址================= ============= * / //绑定套接字地址
如果(绑定(sock_fd,(结构sockaddr *)及serv_addr,* serlen)小于0){
fprintf中(标准错误,错误的结合\\ n);
出口(1);} //获取数据插座
如果(getsockname(sock_fd,(结构sockaddr *)及serv_addr,serlen)小于0){
fprintf中(标准错误,错误带插座的名字);
出口(1);} / * =============================服务器入门================= =========== * / //监听连接
听(sock_fd,32); //打印端口
的printf(%i的,serv_addr.sin_port); conn_fd =接受(sock_fd,(结构sockaddr *)及cli_addr,clilen); / **做一些令人兴奋的与我的新的连接** /}
道具@askmish启发这个
//打印端口
的printf(%i的,serv_addr.sin_port);
变为
//打印端口
的printf(%i的,htons(serv_addr.sin_port));
Here's the deal, I'm writing a simple tcp socket server in C (with unix system calls) that I'm not able to get to accept connections.
From what I can tell, I get through the server initialization just fine, but when I try to connect to the port that I print out (see code below) it refuses as if nothing is there.
More to the point, when I netstat that port isn't even in use. I'm not throwing any errors with my current set up, I'm all dried up for ideas.
int main(){
int sock_fd;
int conn_fd;
struct sockaddr_in serv_addr;
struct sockaddr_in cli_addr;
socklen_t* serlen;
socklen_t* clilen;
clilen = malloc(sizeof(socklen_t));
serlen = malloc(sizeof(socklen_t));
*serlen = sizeof(serv_addr);
*clilen = sizeof(cli_addr);
/*=============================Create Socket=============================*/
//Create Socket
sock_fd = socket(AF_INET, SOCK_STREAM, 0);
if(sock_fd<0){
fprintf(stderr,"error creating socket\n");
exit(1);}
//Initialize Server Address Struct
bzero((char *) &serv_addr, *serlen);
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = INADDR_ANY;
serv_addr.sin_port = 0;
/*=============================Bind Address==============================*/
//Bind socket to an address
if(bind(sock_fd,(struct sockaddr*)&serv_addr,*serlen)<0){
fprintf(stderr,"error binding\n");
exit(1);}
//Get socket data
if(getsockname(sock_fd,(struct sockaddr*)&serv_addr, serlen)<0){
fprintf(stderr,"error with socket name");
exit(1);}
/*=============================Server Started============================*/
//Listen for connections
listen(sock_fd,32);
//Print port
printf("%i", serv_addr.sin_port);
conn_fd = accept(sock_fd,(struct sockaddr*)&cli_addr,clilen);
/**Do something exciting with my new connection**/
}
props to @askmish for inspiring this one
//Print port
printf("%i", serv_addr.sin_port);
becomes
//Print port
printf("%i", htons(serv_addr.sin_port));
这篇关于Unix的交流电插座服务器不接受连接的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!