资源描述:
《c语言干udp聊天程序实现总结1和2》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、C语言干UDP聊天程序实现总结(一)首先网络编程一般都是基于TCP或UDP的。一般聊天室的程序都是基于UDP的面向连接的。一般的过程都是于下:TCP编程的服务器端一般步骤是:1、创建一个socket,用函数socket();2、绑定IP地址、端口等信息到socket上,用函数bind();3、开启监听,用函数listen();4、接收客户端上来的连接,用函数accept();5、收发数据,用函数send()和recv(),或者read()和write();6、关闭网络连接;7、关闭监听;TCP编程的客户端一般步骤是:1、创建一个socket,用函数socket();2
2、、设置要连接的对方的IP地址和端口等属性;3、连接服务器,用函数connect();4、收发数据,用函数send()和recv(),或者read()和write();5、关闭网络连接;与之对应的UDP编程步骤要简单许多,分别如下:UDP编程的服务器端一般步骤是:1、创建一个socket,用函数socket();2、绑定IP地址、端口等信息到socket上,用函数bind();3、循环接收数据,用函数recvfrom();4、关闭网络连接;UDP编程的客户端一般步骤是:1、创建一个socket,用函数socket();2、设置对方的IP地址和端口等属性;3、发送数据,用
3、函数sendto();4、关闭网络连接;关于更详细的网络编程方面的大家可以找相关的书籍来看。这里我只是简单的介绍。可能还不准确。呵呵。初学者嘛!一步步学好啊。这里我写的就是基于UDP的。由于是win32的程序。首先要把软件模型编辑出来。这里就不多说了。一般学了的都会。用一个对话框来实现的。主要有一个大的编辑框为接收框。一个稍大的在下面作为发送编辑框。两个小的编辑框用来记录对方的IP和自己的用户名。当然还有一个发送按钮。关于图我在学生作品里面有。也有代码。好了,现在就来编辑代码了。在编辑代码前我们需要的库是ws2_32.lib和头文件winsock2.h.一定要记得加进
4、去哦。否则就会报错。首先我们做初始化套接字功能。先申明一个全局的WSADATAwsdata;的加载ws2_32.lib套接库的变量。在对话框的InitDialog部分加入:WSAStartup(MAKEWORD(2,2),&wsadata);WSAStartup是启动ws2_32.lib库的函数。MAKEWORD是把两个高位的和地位的数和成一个DWORD类型的数。前一个参数是低字节。后面的是高字节。当然这里你还可以判断加载是否成功。然后在全局的申明一个SOCKETm_socket的套接字变量。编写一个函数用来初始化套接字和绑定套接字。BOOLInitSockt(HWN
5、Dhwnd){//初始化套接字。socket参数第一个是网络套接字族。一般都是AF_INET,第二个参数是套接字类型。TCP的是SOCK_STREAM//而UDP的是SOCK_DGRAM的形式。第三个是初始化的协议。一般都是0.m_socket=socket(AF_INET,SOCK_DGRAM,0);if(INVALID_SOCKET==m_socket)//初始化失败将返回INVALID_SOCKET.{MessageBox(hwnd,TEXT("创建套接字失败!"),TEXT("失败"),MB_OK);WSACleanup();returnFALSE;}//初始
6、化地址。SOCKADDR_INaddr;addr.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//地址是一个结构体。用htonl把它转化为网络字节序。addr.sin_family=AF_INET;//地址家族。addr.sin_port=htons(port);//端口。这个port是自己申明的变量,一般自己申明的端口号要大于1024.同样用htons转化网络形式。intretbind;//绑定套接字。retbind=bind(m_socket,(SOCKADDR*)&addr,sizeof(addr));if(SOCKET_ERR
7、OR==retbind){MessageBox(hwnd,TEXT("绑定套接字失败,无法启动网络检查网络在后再登陆!"),TEXT("网络失败"),MB_OK
8、MB_ICONSTOP);SetWindowText(GetDlgItem(hwnd,IDC_STC),TEXT("绑定套接字失败!"));//在静态控件中显示。closesocket(m_socket);//如果绑定没有成功记得关闭套接字。returnFALSE;}SetWindowText(GetDlgItem(hwnd,IDC_STC),TEXT("绑定套接字成功!"));//同样