本文主要是介绍MUD游戏编程 创建TCP监听套接字,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
创建TCP监听套接字
1、创建套接字
int sock = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );
第一个参数是地址族(Address Family)。
第二个参数是套接字类型。SOCK_STREAM表示TCP套接字。UDP使用SOCK_DGRAM。
第三个参数是协议。SOCK_STREAM流行协议是IPPROTO_TCP。SOCK_DGRAM协议是IPPROTO_UDP和IPPROTO_ICMP。
如果函数执行失败返回-1,执行成功则返回套接字描述符。
2、绑定套接字
接下来将套接字绑定到一个端口号。
函数定义:
int bind( int socket, struct sockaddr *name, int namelen );
第一个参数是socket函数创建的套接字描述符。
第二个参数是sockaddr结构,描述了有关套接字所有类型的特性,其中最重要的是端口号。
第三个参数是sockaddr结构的大小。
新的sockaddr结构定义如下:
struct sockaddr_in {
unsigned short sin_family;
unsigned short sin_port;
struct in_addr sin_addr;
char sin_zero[8];
};
第一个参数是套接字正在使用的地址族,它几乎总是AF_INET。
第二个参数是将要打开的端口号。
第三个参数是IP地址。端口和地址都应该遵循网络字节顺序。
第四个参数知识为了将结构填充到16字节。
对sockaddr_in结构体进行填充:
struct sockaddr_in socketaddress; // create struct
socketaddress.sin_family = AF_INET; // set it for Internet
socketaddress.sin_port = htons( 1000 ); // use port 1000
socketaddress.sin_addr.s_addr = htonl( INADDR_ANY ); // bind to any address
memset( &(socketaddress.sin_zero), 0, 8 ); // clear padding
Socket API为我们提供了一个函数,可以很方便地将字符串格式的IP地址转换为遵循网络字节顺序整数。
socketaddress.sin_addr.s_addr =inet_addr("127.0.0.1" );
最后将地址与地址结构绑定起来,因此输入下面的代码:
bind( sock, (structsockaddr*)&socketaddress, sizeof(struct sockaddr));
3、监听
int listen( int socket, int backlog );
backlog参数是告诉套接字队列中的连接数达到多少时就开始拒绝这些连接。
下面是调用的一个实例:
listen( sock, 16 );
4、接受连接
函数原型:
int accept( int socket, struct sockaddr *addr, socklen_t *addrlen );
sockaddr结构体由函数来填充,表明是谁正在与我们连接。
addrlen指针包含addr结构的长度。
下面给出如何接受这一函数:
int datasock;
struct sockaddr_in socketaddress;
socklen_t sa_size = sizeof( struct sockaddr_in );
datasock = accept( sock, &socketaddress, &sa_size );
这篇关于MUD游戏编程 创建TCP监听套接字的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!