多线程学习五之网络聊天室的实现

UDP网络聊天室开发教程
本文详细介绍了使用UDP协议创建网络聊天室的过程,包括加载套接字库、创建套接字、绑定、接收与发送数据等关键步骤。同时,文中还分享了在开发过程中遇到的几个常见错误及其解决方案。

在学习完孙鑫老师的网络聊天室部分后,现总结如下:

使用套接字(UDP)的顺序如下:

1 加载套接字库

BOOL AfxSocketInit(
   WSADATA* lpwsaData = NULL 
);
  它负责加载套接字库,并进行版本协商。

2 创建套接字

SOCKET WSAAPI socket(
  _In_  int af,//地址家族
  _In_  int type,//通信协议类型
  _In_  int protocol
);
3 绑定套接字
   
int bind(
  _In_  SOCKET s,
  _In_  const struct sockaddr *name,//指向绑定的套接字的一些信息
  _In_  int namelen
);
struct sockaddr_in {//本地的套接字地址信息
        short   sin_family;
        u_short sin_port;//端口,需要将主字节序改为网络字节序hton(sl)
        struct  in_addr sin_addr;//需要将主字节序改为网络字节序hton(sl)
        char    sin_zero[8];
};
typedef struct in_addr {//IP地址的表示形式
  union {
    struct {
      u_char s_b1,s_b2,s_b3,s_b4;
    } S_un_b;
    struct {
      u_short s_w1,s_w2;
    } S_un_w;
    u_long S_addr;
  } S_un;
} IN_ADDR, *PIN_ADDR, FAR *LPIN_ADDR;

4接受数据(在这个程序中将该函数包含在线程的入口函数实现方法中)//由于在等待数据的过程中,recvfrom函数易发生堵塞(需要时间等待外界的输入)故多线程非常适用

int recvfrom(
  _In_         SOCKET s,//本地已绑定的套接字
  _Out_        char *buf,//存放接受的字符
  _In_         int len,//buf长度
  _In_         int flags,
  _Out_        struct sockaddr *from,//存放发送端的套接字信息
  _Inout_opt_  int *fromlen//sockaddr长度
);
附:

char* FAR inet_ntoa(//将网络字节序转变为ASCII字符串
  _In_  struct   in_addr in
);
5  发送数据
int sendto(
  _In_  SOCKET s,//链接的套接字
  _In_  const char *buf,//即将发送的字符串
  _In_  int len,//字符串长度
  _In_  int flags,
  _In_  const struct sockaddr *to//发送信息的目的地址(的套接字信息),
  _In_  int tolen//套接字信息长度
);
值得说明的是:
1  在编写程序的过程中,用户自建消息并进行投射是很重要的。
2 在编写的过程中遇到了很多错误,总结一下。
错误1:

VS2008LINK : fatal error LNK1000: Internal error during IncrBuildImage

            解决方法:修改链接选项,方法:项目->属性->链接器->常规   下面的“启用增量链接”,将“是(/INCREMENTAL)”改为“否(/INCREMENTAL:NO)”,然后确                                  定就可以了。

错误2:

general error c101008a: Failed to save the updated manifest to the file 

            解决方法:VS2008下,生成--->清理解决方案

错误3:

error C2664: strcpy : 不能将参数 2 从 CString 转换为 const char *
            解决方法:参见CString 、string与char*的区别

Reference
                   http://kiral.iteye.com/blog/1752644

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值