socket C/C++编程(5)服务器端允许用户连接之listen()函数

来源:互联网 发布:为什么要用react.js 编辑:程序博客网 时间:2024/06/07 06:36

1. Linux server端代码(test.cpp)

#ifdef WIN32    #include <windows.h>#else    #include <sys/types.h>    #include <sys/socket.h>    #include <unistd.h>    #include <stdlib.h>    #include <arpa/inet.h>#endif#include <stdio.h>int main(int argc, char *argv[]){    // 初始化”ws2_32.lib”    #ifdef WIN32        WSADATA ws;        WSAStartup(MAKEWORD(2,2), &ws);    #endif    // 创建socket    int sock = socket(AF_INET,SOCK_STREAM,0);    if(sock == -1){        printf("create sock error!\n");        return -1;    }    // TCP Server指定端口并设置服务端端口的属性,返回(sockaddr*)&saddr    unsigned short port = 8080; // 默认端口号    if(argc > 1){        port = atoi(argv[1]);    }    sockaddr_in saddr; // 声明端口    saddr.sin_family = AF_INET; // TCPIP协议    saddr.sin_port = htons(port); // 绑定端口号, htons()之host-to-network    saddr.sin_addr.s_addr = 0; //或htonl(0) 服务器接受的IP地址 0表示接受任意内外网IP    // 绑定端口到指定的socket,输入(sockaddr*)&saddr    if(bind(sock, (sockaddr*)&saddr, sizeof(saddr))!=0){        printf("OS bind socks to this port %d failed\n", port);        return -2;    }    printf("OS bind this port %d to sockets successfully!", port);    listen(sock, 10); // 允许用户连接函数(客户socket(一个客户一个socket),最大请求数队列的长度,)    getchar();    return 0;}

2. 分析
客户端模拟通过telnet成功连接!如下图,

这里写图片描述

但是,客户端还是无法向服务器端发送数据!下文讲述如何用accept()函数解决这个问题。

参考
http://blog.csdn.net/dengjin20104042056/article/details/52357452

阅读全文
0 0
原创粉丝点击