代码开源(4)——Windows 中CS简单实现
2011-10-27 09:00
309 查看
下面两段代码介绍Windows中,TCP/IP的建立过程,只是一个最简单的实现。VS2008中测试通过。
服务器端:
view
plainprint?
#include<winsock.h>
#include<stdio.h>
#pragma comment(lib,"wsock32.lib")
int main()
{
//请求版本
WORD wVersionRequested; //Window Socket版本
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 1, 1 ); //高位为副版本,请求1.1版本
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) { return 1; } //找不到合适版本
if(LOBYTE( wsaData.wVersion)!= 1 ||
HIBYTE(wsaData.wVersion) != 1)
{
WSACleanup();
return 1;
}
//创建套接字socket
SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0); //创建套接字
SOCKADDR_IN addrSrv;
addrSrv.sin_family=AF_INET;
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//转换为网络顺序
addrSrv.sin_port=htons(5001);
//绑定bind
if(bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)) < 0)
{
printf("bind failed\n");
return 1;
}
//监听listen
listen(sockSrv, 5);
SOCKADDR_IN addrClient;
while(true)
{
int len=sizeof(SOCKADDR);
char sendBuf[100];
char recvBuf[100];
//用sockConn与客户端通信
SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);
sprintf(sendBuf,"Welcome %s to seu",inet_ntoa(addrClient.sin_addr));
send(sockConn, sendBuf, strlen(sendBuf) + 1, 0);
recv(sockConn, recvBuf, 100, 0);
printf("%s\n", recvBuf);
closesocket(sockConn);
}
return 0;
}
客户端:
view
plainprint?
#include<winsock.h>
#include<stdio.h>
#pragma comment(lib,"wsock32.lib")
int main()
{
//请求版本
WORD wVersionRequested; //Window Socket版本
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 1, 1 ); //高位为副版本,请求1.1版本
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) { return 1; } //找不到合适版本
if(LOBYTE( wsaData.wVersion)!= 1 ||
HIBYTE(wsaData.wVersion) != 1)
{
WSACleanup();
return 1;
}
char ip[] = "127.0.0.1";
int port = 5001;
SOCKET sockClient = socket(AF_INET,SOCK_STREAM,0); //创建套接字
SOCKADDR_IN addrSrv;
addrSrv.sin_family = AF_INET; //使用因特网
addrSrv.sin_addr.S_un.S_addr = inet_addr(ip); //服务器IP地址
addrSrv.sin_port = htons(port); //服务器端口
if(connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)) < 0)
{
printf("connect failed\n");
return 1;
}
char recvBuf[100];
recv(sockClient,recvBuf,100,0); //接受数据
printf("%s\n",recvBuf); //打印收到的数据
send(sockClient, "hello seu!", strlen("hello seu!") + 1, 0); //发送数据
Sleep(5000);
closesocket(sockClient); //关闭套接字
WSACleanup();
return 0;
}
服务器端:
view
plainprint?
#include<winsock.h>
#include<stdio.h>
#pragma comment(lib,"wsock32.lib")
int main()
{
//请求版本
WORD wVersionRequested; //Window Socket版本
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 1, 1 ); //高位为副版本,请求1.1版本
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) { return 1; } //找不到合适版本
if(LOBYTE( wsaData.wVersion)!= 1 ||
HIBYTE(wsaData.wVersion) != 1)
{
WSACleanup();
return 1;
}
//创建套接字socket
SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0); //创建套接字
SOCKADDR_IN addrSrv;
addrSrv.sin_family=AF_INET;
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//转换为网络顺序
addrSrv.sin_port=htons(5001);
//绑定bind
if(bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)) < 0)
{
printf("bind failed\n");
return 1;
}
//监听listen
listen(sockSrv, 5);
SOCKADDR_IN addrClient;
while(true)
{
int len=sizeof(SOCKADDR);
char sendBuf[100];
char recvBuf[100];
//用sockConn与客户端通信
SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);
sprintf(sendBuf,"Welcome %s to seu",inet_ntoa(addrClient.sin_addr));
send(sockConn, sendBuf, strlen(sendBuf) + 1, 0);
recv(sockConn, recvBuf, 100, 0);
printf("%s\n", recvBuf);
closesocket(sockConn);
}
return 0;
}
客户端:
view
plainprint?
#include<winsock.h>
#include<stdio.h>
#pragma comment(lib,"wsock32.lib")
int main()
{
//请求版本
WORD wVersionRequested; //Window Socket版本
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 1, 1 ); //高位为副版本,请求1.1版本
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) { return 1; } //找不到合适版本
if(LOBYTE( wsaData.wVersion)!= 1 ||
HIBYTE(wsaData.wVersion) != 1)
{
WSACleanup();
return 1;
}
char ip[] = "127.0.0.1";
int port = 5001;
SOCKET sockClient = socket(AF_INET,SOCK_STREAM,0); //创建套接字
SOCKADDR_IN addrSrv;
addrSrv.sin_family = AF_INET; //使用因特网
addrSrv.sin_addr.S_un.S_addr = inet_addr(ip); //服务器IP地址
addrSrv.sin_port = htons(port); //服务器端口
if(connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)) < 0)
{
printf("connect failed\n");
return 1;
}
char recvBuf[100];
recv(sockClient,recvBuf,100,0); //接受数据
printf("%s\n",recvBuf); //打印收到的数据
send(sockClient, "hello seu!", strlen("hello seu!") + 1, 0); //发送数据
Sleep(5000);
closesocket(sockClient); //关闭套接字
WSACleanup();
return 0;
}
相关文章推荐
- 代码开源(4)——Windows 中CS简单实现
- Windows下一个简单的日志系统的C代码实现
- 基于visual c++之windows核心编程代码分析(59)实现网络简单代理编程
- 基于visual c++之windows核心编程代码分析(59)实现网络简单代理编程
- 代码开源(3)——UNIX中CS简单实现
- 代码开源(3)——UNIX中CS简单实现
- JS中实现简单Formatter函数示例代码
- 基于Visual C++之Windows核心编程代码分析(2)实现Windows用户管理
- TS Source Filter + MPEG-2 Demultiplexer Filter进行简单的TS流解复用(之二:用代码实现)
- C#摄像头实现拍照功能的简单代码示例
- 数据结构 - 队列简介 及 1个简单的c语言链式队列代码实现
- 如何实现在Windows上运行Linux程序,附示例代码
- 【KNN近邻算法】实现识别简单数字验证码(算法原理+代码笔记)
- UDP简单实现代码
- 杭电1076两种代码实现,一种方便理解一种实现简单
- PHP实现只在IE浏览器显示广告简单代码
- oracle实现远程连接超简单;枚举与剪枝();PowerDesigner生成数据库代码注意里面的双引號,应该去掉
- JSP实现的简单分页显示效果代码
- php分页代码简单实现
- AjaxPanel自定义控件实现页面无刷新数据交互(做了个示例程序, 效果确实比较Cool, 用法非常简单! )(示例代码下载)