您的位置:首页 > 其它

2015华为软赛(二)——socket链接

2015-06-21 11:22 267 查看
点滴记录总结,一天一打鸡血。

2015年5月华为组织了一次软件精英挑战赛,赛题是德州扑克手牌AI~

环境及测试说明:http://pan.baidu.com/s/1dD2dL0P

关于socket通信之前写过一篇文章:http://blog.csdn.net/lh648365878/article/details/45716681

client端的主要过程如下:

创建socket,返回socket描述符sockfd

设置属性,可以设置端口为reuse模式

使用bind对客户端ip、端口进行绑定

将服务器端的ip和端口绑定(视赛制需求,一般不需要)

连接

WriteLog函数用于服务端记录输出,方便调试~

struct sockaddr_in c_addr, s_addr;
bzero(&c_addr, sizeof(struct sockaddr));
bzero(&s_addr, sizeof(struct sockaddr));

/* set client_addr */
c_addr.sin_family = AF_INET;
c_addr.sin_port = htons(atoi(client_port));
if (inet_aton(client_ip, (struct in_addr *)&c_addr.sin_addr.s_addr) == 0) {
//WriteLog(client_log, "wrong client_ip!\n", num);
exit(1);
}

/*create socket*/
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) {
//WriteLog(client_log, "socket create error!\n", num);
exit(1);
}
/*SO_REUSEADDR */
int reuseFlag = 1;
if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &reuseFlag, sizeof(reuseFlag)) == -1) {
//WriteLog(client_log, "setsockopt so_reuseaddr error!\n", num);
exit(1);
}

/*bind client socket */
if (bind(sockfd, (struct sockaddr*)&c_addr, sizeof(struct sockaddr)) == -1) {
//WriteLog(client_log, "bind client error!\n", num);
exit(1);
}

/*set server_ip */
s_addr.sin_family = AF_INET;
s_addr.sin_port = htons(atoi(server_port));
if (inet_aton(server_ip, (struct in_addr *)&s_addr.sin_addr.s_addr) == 0) {
//WriteLog(client_log, "wrong server_ip!\n", num);
exit(1);
}
/* connect to server */
while (connect(sockfd, (struct sockaddr*)&s_addr, sizeof(struct sockaddr)) == -1);
//WriteLog(client_log, "connect success!\n", num);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  socket