WinSocket简单编程实验
来源:互联网 发布:影响力 知乎 编辑:程序博客网 时间:2024/05/23 12:21
转载:http://www.cnblogs.com/tornadomeet/archive/2012/04/11/2442140.html
这一节是计算机网络作业,windows socket编程,老师电脑上开一个服务器程序,公开ip地址和端口号,我们同学自己编写一个客户端,能与老师的服务器建立联系,两者能收发即可。这样的代码网上很多,而是就采用了孙鑫VC++第14讲的代码,下面是添加的一点简单注释。
其实socket完成连接功能很简单,依葫芦画瓢即可。首先来看面向连接的TCP流程图。
现在用TCP协议来完成任务,下面是孙鑫老师的代码,由于我们要提前测试自己的代码,所以也用了服务器端的代码,服务器端端server代码如下:
#include <Winsock2.h> #include <stdio.h> void main() { // 以下的几句都是固定的 WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD( 1, 1 ); err = WSAStartup( wVersionRequested, &wsaData );//该函数的功能是加载一个Winsocket库版本 if ( err != 0 ) { return; } if ( LOBYTE( wsaData.wVersion ) != 1 || HIBYTE( wsaData.wVersion ) != 1 ) { WSACleanup( ); return; } //真正socket编程部分 SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);//面向连接的可靠性服务SOCK_STRAM SOCKADDR_IN addrSrv;//存放本地地址信息的 addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//htol将主机字节序long型转换为网络字节序 addrSrv.sin_family=AF_INET; addrSrv.sin_port=htons(6001);//htos用来将端口转换成字符,1024以上的数字即可 bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));//将socket绑定到相应地址和端口上 listen(sockSrv,5);//等待队列中的最大长度为5 SOCKADDR_IN addrClient; int len=sizeof(SOCKADDR); while(1) { SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);//建立一个新的套接字用于通信,不是前面的监听套接字 char sendBuf[100]; sprintf(sendBuf,"Server IP is:%s", inet_ntoa(addrClient.sin_addr));//inet_nota函数是将字符转换成ip地址 send(sockConn,sendBuf,strlen(sendBuf)+1,0);//服务器向客户端发送数据 char recvBuf[100]; recv(sockConn,recvBuf,100,0);//服务器从客户端接受数据 printf("%s\n",recvBuf); closesocket(sockConn);//关闭socket } }
客户端client的代码如下:
#include <Winsock2.h> #include <stdio.h> void main() { //固定格式 WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD( 1, 1 ); err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0 ) { return; } if ( LOBYTE( wsaData.wVersion ) != 1 || HIBYTE( wsaData.wVersion ) != 1 ) { WSACleanup( ); return; } //建立通讯socket SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0); SOCKADDR_IN addrSrv; addrSrv.sin_addr.S_un.S_addr=inet_addr("192.168.1.24");//设定需要连接的服务器的ip地址 addrSrv.sin_family=AF_INET; addrSrv.sin_port=htons(6001);//设定需要连接的服务器的端口地址 connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));//与服务器进行连接 //接受来自老师的信息 char recvBuf[100]; recv(sockClient,recvBuf,100,0); printf("来自老师的信息:\n%s\n",recvBuf); //发送信息给老师 send(sockClient,"姓名:小明 学号:123456789,IP地址:192.168.1.14!",strlen("姓名:小明 学号:123456789,IP地址:192.168.1.14!")+1,0); closesocket(sockClient); WSACleanup(); }
- WinSocket简单编程实验
- WinSocket简单编程实验
- winSocket编程简单入门例子
- winsocket 编程
- winsocket编程
- WinSocket编程
- Winsocket编程
- 【WinSocket】WinSocket 编程入门【精华】
- Delphi4的Winsocket编程
- winsocket编程实例
- winsocket编程实例
- 一个WinSocket编程实例
- WinSocket编程详解
- MFC WinSocket编程
- 网络-WinSocket-socket编程
- WinSocket的最简单示例
- 简单的 winsocket TCP通信
- 简单的 Winsocket UDP 通信
- 并查集之树状数组
- JavaScript 演练(8). 对象成员、类成员(原型、非原型)
- UIScrollView && UITableView相关属性汇总
- Delphi常见错误代码及中文解释
- 第三章 AOP 通过Java API创建增强
- WinSocket简单编程实验
- 【Windows XP操作系统中的另一个还原专家】
- 并查集之朋友圈子
- Sublime Text3常用快捷键
- 我永远都会是这么“酷”!
- Sizeof与Strlen的区别与联系
- C语言位运算详解
- [SVN]SVN的使用经验汇总
- IBM 模型 1,2,3