基于socket简易聊天程序毕业设计论文.docx

上传人:b****5 文档编号:14448863 上传时间:2023-06-23 格式:DOCX 页数:7 大小:169.01KB
下载 相关 举报
基于socket简易聊天程序毕业设计论文.docx_第1页
第1页 / 共7页
基于socket简易聊天程序毕业设计论文.docx_第2页
第2页 / 共7页
基于socket简易聊天程序毕业设计论文.docx_第3页
第3页 / 共7页
基于socket简易聊天程序毕业设计论文.docx_第4页
第4页 / 共7页
基于socket简易聊天程序毕业设计论文.docx_第5页
第5页 / 共7页
基于socket简易聊天程序毕业设计论文.docx_第6页
第6页 / 共7页
基于socket简易聊天程序毕业设计论文.docx_第7页
第7页 / 共7页
亲,该文档总共7页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基于socket简易聊天程序毕业设计论文.docx

《基于socket简易聊天程序毕业设计论文.docx》由会员分享,可在线阅读,更多相关《基于socket简易聊天程序毕业设计论文.docx(7页珍藏版)》请在冰点文库上搜索。

基于socket简易聊天程序毕业设计论文.docx

基于socket简易聊天程序毕业设计论文

简单的socket程序

虽然很简单,但还是调试了很长时间。

本科时候接触过socket——那个帅帅的刘老师的课,现在重新再捡起来。

程序中专门建立一个FunThread线程用来接收数据,实现双向通信,也可以连续发送、连续接收。

代码贴上来,如果还能保留VAView那样的颜色区别就好看了,但是试了好几遍都不行

server:

#include

#include

#definePORT      6000//服务器端口

#defineMSGSIZE   1024//收发缓冲区的大小

#pragmacomment(lib,"ws2_32.lib")//链接静态库

DWORDWINAPIFunThread(LPVOID);//创建一个线程,专门用来接收数据

SOCKET     sClient;//连接所用套节字

SOCKET     sListen;//监听套接字

SOCKADDR_INclient;//保存客户的地址信息

int        iaddrSize=sizeof(SOCKADDR_IN);

intmain()

{

WSADATA    wsaData;

SOCKADDR_INlocal;

char       s_Message[MSGSIZE];//收发缓冲区

WSAStartup(0x0202,&wsaData);//InitializeWindowssocketlibrary

sListen=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

#include

#defineSERVER_ADDRESS"127.0.0.1"//服务器端IP地址

#definePORT          6000        

#defineMSGSIZE       1024        

#pragmacomment(lib,"ws2_32.lib")

DWORDWINAPIFunThread(LPVOID);   

SOCKET     sClient;              

SOCKADDR_INserver;                

intmain()

{

WSADATA    wsaData;

char       c_Message[MSGSIZE];

WSAStartup(0x0202,&wsaData);

sClient=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);   

memset(&server,0,sizeof(SOCKADDR_IN));              //先将保存地址的server置为全0

server.sin_family=PF_INET;                          //声明地址格式是TCP/IP地址格式

server.sin_port=htons(PORT);                        //指明连接服务器的端口号

server.sin_addr.s_addr=inet_addr(SERVER_ADDRESS);   //指明连接服务器的IP地址

connect(sClient,(structsockaddr*)&server,sizeof(SOCKADDR_IN));//连到刚才指明的服务器上

HANDLEhThread=CreateThread(NULL,0,FunThread,0,0,0);

CloseHandle(hThread);

while(TRUE)

{

  printf("ClientSend:

");

  gets(c_Message);  

      

  send(sClient,c_Message,strlen(c_Message),0);

  if(!

strcmp(c_Message,"exit"))//client自身退出

   exit

(1);

}

//释放连接和进行结束工作

closesocket(sClient);

WSACleanup();

return0;

}

DWORDWINAPIFunThread(LPVOID)

{

char  s_Message[MSGSIZE];

int   ret;

while(TRUE)

{

  ret=recv(sClient,s_Message,MSGSIZE,0);

  if(ret==SOCKET_ERROR)

  {

   printf("\nServerisclosed!

\n");

   exit

(1);

  }

  s_Message[ret]='\0';  

  printf("\nReceived:

%s\n",s_Message);

  if(!

strcmp(s_Message,"exit"))//server让client退出

   exit

(1);

}

return0;

}

程序在VC++6.0环境下编译通过。

先运行server端,再运行client,链接建立:

client和server可进行双通信,可连续发送、接收;client可自行退出,也可由server强制退出,发送exit命令即可:

client退出后,server重新建立监听,有新的client运行时,再次建立新的连接:

注意:

client的端口号是随机的。

服务器关闭时,client自动退出:

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2