基于socket简易聊天程序.doc
上传人:qw****27 上传时间:2024-09-12 格式:DOC 页数:10 大小:308KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

基于socket简易聊天程序.doc

基于socket简易聊天程序.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

简单的socket程序2010-01-1322:18虽然很简单,但还是调试了很长时间。本科时候接触过socket——那个帅帅的刘老师的课,现在重新再捡起来。程序中专门建立一个FunThread线程用来接收数据,实现双向通信,也可以连续发送、连续接收。代码贴上来,如果还能保留VAView那样的颜色区别就好看了,但是试了好几遍都不行server:#include<WINSOCK2.H>#include<stdio.h>#definePORT6000//服务器端口#defineMSGSIZE1024//收发缓冲区的大小#pragmacomment(lib,"ws2_32.lib")//链接静态库DWORDWINAPIFunThread(LPVOID);//创建一个线程,专门用来接收数据SOCKETsClient;//连接所用套节字SOCKETsListen;//监听套接字SOCKADDR_INclient;//保存客户的地址信息intiaddrSize=sizeof(SOCKADDR_IN);intmain(){WSADATAwsaData;SOCKADDR_INlocal;chars_Message[MSGSIZE];//收发缓冲区WSAStartup(0x0202,&wsaData);//InitializeWindowssocketlibrarysListen=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);//创建服务器监听套节字。TCP协议local.sin_family=AF_INET;//AF_INET指明使用TCP/IP协议族local.sin_port=htons(PORT);//指明连接服务器的端口号local.sin_addr.s_addr=htonl(INADDR_ANY);//自动获取本机地址bind(sListen,(structsockaddr*)&local,sizeof(SOCKADDR_IN));//地址绑定到套接字listen(sListen,1);//开始监听sClient=accept(sListen,(structsockaddr*)&client,&iaddrSize);//建立连接printf("Accepteclient:%s:%d\n",inet_ntoa(client.sin_addr),ntohs(client.sin_port));HANDLEhThread=CreateThread(NULL,0,FunThread,0,0,0);//创建接收线程CloseHandle(hThread);while(TRUE){printf("ServerSend:");//从键盘输入gets(s_Message);//发送数据send(sClient,s_Message,strlen(s_Message),0);}return0;}DWORDWINAPIFunThread(LPVOID){charc_Message[MSGSIZE];//收发缓冲区intret;//接收字节的个数while(TRUE){ret=recv(sClient,c_Message,MSGSIZE,0);//接收数据if(ret==SOCKET_ERROR){printf("\nclientisclosed!");sClient=accept(sListen,(structsockaddr*)&client,&iaddrSize);//重新开始监听printf("\nAcceptenewclient:%s:%d",inet_ntoa(client.sin_addr),ntohs(client.sin_port));memset(c_Message,0,1024);//将原来的clientmessage归零continue;}c_Message[ret]='\0';printf("\nReceived:%s\n",c_Message);}return0;}client:#include<WINSOCK2.H>#include<stdio.h>#defineSERVER_ADDRESS"127.0.0.1"//服务器端IP地址#definePORT6000#defineMSGSIZE1024#pragmacomment(lib,"ws2_32.lib")DWORDWINAPIFunThread(LPVOID);SOCKETsClient;SOCKADDR_INserver;intmain(){WSADATAwsaData;charc_Message[MSGSIZE];WSAStartup(0x0202,&wsaData);sClient=socket