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

本文记录了2015年华为软件精英挑战赛中涉及的德州扑克AI赛题,重点讨论了socket通信的过程,包括创建socket、设置属性、bind操作和连接步骤。同时提供了相关测试环境说明和之前的socket通信文章链接,便于理解和调试。
摘要由CSDN通过智能技术生成

点滴记录总结,一天一打鸡血。

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

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

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

client端的主要过程如下:

  1. 创建socket,返回socket描述符sockfd
  2. 设置属性,可以设置端口为reuse模式
  3. 使用bind对客户端ip、端口进行绑定
  4. 将服务器端的ip和端口绑定(视赛制需求,一般不需要)
  5. 连接

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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值