网络接口编程-聊天,广播程序.doc_第1页
网络接口编程-聊天,广播程序.doc_第2页
网络接口编程-聊天,广播程序.doc_第3页
网络接口编程-聊天,广播程序.doc_第4页
网络接口编程-聊天,广播程序.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

广播:接收程序#include #include #include #pragma comment(lib,ws2_32.lib) void main(void) SOCKET s; sockaddr_in from,a; WSADATA wsdata; BOOL optval; /启动SOCKET库,版本为2.0 WSAStartup(WINSOCK_VERSION,&wsdata); optval=TRUE; /然后赋值给两个地址,一个用来绑定套接字,一个用来从网络上的广播地址接收消息; a.sin_family=AF_INET; a.sin_addr.s_addr=INADDR_ANY; a.sin_port=htons(9999); from.sin_family=AF_INET; from.sin_addr.s_addr=INADDR_BROADCAST; from.sin_port=htons(9999); int fromlength=sizeof(SOCKADDR); /用UDP初始化套接字 s=socket(AF_INET,SOCK_DGRAM,0); /设置该套接字为广播类型, setsockopt(s,SOL_SOCKET,SO_BROADCAST,(char FAR *)&optval,sizeof(optval); bind(s,(sockaddr *)&a,sizeof(sockaddr_in); char buf256; while(1)/从广播地址接收消息,注意用来绑定的地址和接收消息的地址是不一样的 recvfrom(s,buf,256,0,(struct sockaddr FAR *)&from,(int FAR *)&fromlength); Sleep(2000); printf(%sn,buf); ZeroMemory(buf,256); memset(&buf,0,sizeof(buf); 发送程序:#include #include #include #pragma comment(lib,ws2_32.lib) main() SOCKET s; sockaddr_in addrto; WSADATA wsdata; BOOL bsocket; char *smsg=你好!这是广播测试!; WSAStartup(WINSOCK_VERSION,&wsdata); s=WSASocket(AF_INET,SOCK_DGRAM,0,NULL,0,WSA_FLAG_OVERLAPPED); bsocket=TRUE; /然后赋值给地址,用来从网络上的广播地址接收消息;memset (&addrto,0,sizeof(addrto) ;addrto.sin_family=AF_INET; addrto.sin_addr.s_addr=INADDR_BROADCAST; addrto.sin_port=htons(9999); bool opt=true; /设置该套接字为广播类型, setsockopt(s,SOL_SOCKET,SO_BROADCAST,(char FAR *)&opt,sizeof(opt); int nlen=sizeof(addrto); while(1) Sleep(2000); /从广播地址发送消息 int ret=sendto(s,smsg,256,0,(sockaddr*)&addrto,nlen); if(ret=SOCKET_ERROR) printf(Send error %d!n,WSAGetLastError();else printf(广播发送成功n); 服务器端程序:1、创建套接字(socket)2、将socket绑定到一个本地IP地址和端口上(bind)3、将socket设为监听模式,准备接收客户请求(listen)4、等待客户请求到来:当请求到来后,接收连接请求,返回一个新的对应于此次连接的socket(accept)5、用返回的socket和客户端进行通信(send/recv)6、返回,等待另一客户请求7、关闭socket(closesocket)客户端程序:1、创建套接字(socket)2、向服务器发出连接请求(connect)3、和服务器进行通信(send/recv)4、关闭socket(closesocket)#include “iostream.h”#include “winsock2.h”#include “windows.h”#define InternetAddr “127.0.0.1”#define iPort 5055#pragma comment(lib, “ws2_32.lib”)void main()WSADATA wsa;WSAStartup(MAKEWORD(2,2), &wsa);SOCKET fdServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);struct sockaddr_in server;server.sin_family = AF_INET;server.sin_addr.s_addr = inet_addr(InternetAddr);server.sin_port = htons(iPort);int ret = bind(fdServer, (sockaddr*)&server, sizeof(server);ret = listen(fdServer, 4);SOCKET AcceptSocket; fd_set fdread; /定义一个socket集合 timeval tv;int nSize; while(1)FD_ZERO(&fdread);/初始化fd_setFD_SET(fdServer, &fdread);/分配套接字句柄到相应的fd_set集合 tv.tv_sec = 2;/这里让select等待两秒后返回,避免被锁死,也避免马上返回tv.tv_usec = 0;select(0, &fdread, NULL, NULL, &tv);nSize = sizeof(server);if (FD_ISSET(fdServer, &fdread)/如果套接字句柄还在fd_set里,说明客户端已经有connect的请求发过来了,马上可以accept成功AcceptSocket = accept(fdServer,( sockaddr*) &server, &nSize);break; else/还没有客户端的connect请求,可以去做别的事,避免像没有用select方式的阻塞套接字程序被锁死的情况,如果没用select,当程序运行到accept的时候客户端恰好没有可连接的请求,那么程序就会被锁死,做不了任何事情-复用/do something:MessageBox(NULL, waiting., recv, MB_ICONINFORMATION);/别的事做完后,继续去检查是否有客户端连接请求char buffer128;ZeroMemory(buffer, 128); FD_SET(AcceptSocket, &fdread); select(0, &fdread, NULL, NULL, &tv); if (FD_ISSET(AcceptSocket, &fdread) ret = recv(AcceptSocket,buffer,128,0); Else :MessageBox(NULL, buffer, “recv”, MB_ICONINFORMATION); closesocket(AcceptSocket);WSACleanup();return; 聊天服务器#pragma comment (lib,ws2_32.lib)#include #include int main() WSADATA wsaData; WSAStartup(WINSOCK_VERSION,&wsaData); SOCKET sock = socket(AF_INET, SOCK_STREAM,0); if(sock=INVALID_SOCKET) WSACleanup(); return -1; struct sockaddr_in server; memset(&server,0,sizeof(server); server.sin_addr.s_addr=INADDR_ANY; server.sin_family=AF_INET; server.sin_port=htons(9999); bind(sock,(struct sockaddr *)&server,sizeof(server); if(listen(sock,1024)= SOCKET_ERROR) printf(listen error %d!n,WSAGetLastError(); else printf(监听成功!n); SOCKET sockSvr; int ret,res; char recvbuf1200=0; char sendbuf1200=0; sockSvr = accept (sock,NULL,NULL); fd_set readSet; fd_set sendSet; timeval tv,sv; memset(&tv,0,sizeof(tv); memset(&sv,0,sizeof(sv); sv.tv_sec=2; tv.tv_sec=1; FD_ZERO(&readSet); FD_SET(sockSvr,&readSet); FD_ZERO(&sendSet); FD_SET(sockSvr,&sendSet); res=select(0,NULL,&sendSet,NULL,&sv); ret=select(0,&readSet,NULL,NULL,&tv); while(1) if(FD_ISSET(sockSvr,&readSet) memset(recvbuf,0,1200); ret=recv(sockSvr,recvbuf,1200,0); if( ret!= SOCKET_ERROR) printf(接收:); puts(recvbuf); char recvbuf1200=0; if(FD_ISSET(sockSvr,&sendSet) memset(sendbuf,0,1200); printf(发送:); gets(sendbuf); res=send(sockSvr,sendbuf,1200,0); if( ret!= SOCKET_ERROR) char sendbuf1200=0; closesocket(sock); WSACleanup(); return 0; 聊天客户端#pragma comment (lib,ws2_32.lib)#include #include int main(int argc, char *argv) WSADATA wsaData; WSAStartup(WINSOCK_VERSION,&wsaData); SOCKET sock = socket(AF_INET, SOCK_STREAM,0); if(sock=INVALID_SOCKET) WSACleanup(); return -1; struct sockaddr_in server; memset(&server,0,sizeof(server); server.sin_addr.s_addr=inet_addr(114.229.253.231); server.sin_family=AF_INET; server.sin_port=htons(9999); if(connect(sock,(struct sockaddr *)&server,sizeof(server)=SOCKET_ERROR ) if(sock!=INVALID_SOCKET) closesocket(sock); printf(Failed.(connect %d)n,WSAGetLastError(); WSACleanup(); return -1; else printf(连接服务器成功!nn); char recvbuf1200=0; char sendbuf1200=0; int ret,res; fd_set readSet; fd_set sendSet; timeval tv,sv; memset(&tv,0,sizeof(tv); memset(&sv,0,sizeof(sv); sv.tv_sec=1; tv.tv_sec=2; FD_ZERO(&readSet); FD_SET(sock,&readSet); FD_ZERO(&sendSet); FD_SET(sock,&sendSet); /ret=select(0,&readSet,NULL,NULL,&tv); res=select(0,NULL,&sendSet,NULL,&sv); while(1) if(FD_ISSET(sock,&readSet) memset(recvbuf,0,1200); ret=recv

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论