网络通信编程初步:windows socket 程序示例
来源:互联网 发布:php财务系统源码 编辑:程序博客网 时间:2024/06/05 02:20
/***********************************************************************
**程序功能:演示使用windows socket进行网络通信
**程序包括:一个服务端线程、三个客户端线程,分别接收、发送数据
**完成日期:2009-5-23
**作者 :lauo
*************************************************************************/
#include<iostream>
//#include"sock.h"
#include<winsock2.h>
#include<windows.h>
using namespace std;
#pragma comment( lib, "ws2_32.lib" ) //使用了静态连接库
DWORD WINAPI Servicer(LPVOID param)
{
WSADATA wsaData;
int err;
err=WSAStartup(MAKEWORD(1,1),&wsaData);
if(err!=0)
cout<<int(LOBYTE(wsaData.wVersion))<<"."<<int(HIBYTE(wsaData.wVersion))<<endl;
//创建用于监听的套接字
SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//本机地址
//cout<<htonl(INADDR_ANY)<<endl;
addrSrv.sin_family=AF_INET;//协议家族
addrSrv.sin_port=htons(6000);//端口号
//绑定套接字
bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));//第二个参数为要绑定的本机端口号及其地址等 端口与SOCKET绑定
listen(sockSrv,50);//5---flags 将套接字置为监听模式(服务器端)
SOCKADDR_IN addrClient;//客户端地址
int len=sizeof(SOCKADDR);
while(1)//服务死循环
{
SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);//建立一个接收请求的套接字,用以与客户端打交道
char recvBuf[256];
//接收数据
recv(sockConn,recvBuf,256,0);//阻塞式等待客户端的请求的到来
//打印接收的数据
cout<<recvBuf<<" from:"<<inet_ntoa(addrClient.sin_addr)<<endl;//inet_ntoa(addrClient.sin_addr)显示了客户请示的地址
closesocket(sockConn);
//
}
return 0;
}
DWORD WINAPI Clienter(LPVOID param)
{
WSADATA wsaData;
int err;
err=WSAStartup(MAKEWORD(1,1),&wsaData);
if(err!=0)
return 0;
while(1)//线程死循环
{
//创建用于发送数据的套接字
SOCKET sockClt=socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=inet_addr("192.168.0.1");
//目标主机地址正确的本机地址应该为.168.0.1 或者主机网络IP(使用命令行命令:ipconfig 可以查看之)
addrSrv.sin_family=AF_INET;//协议家族
addrSrv.sin_port=htons(6000);//端口号
err=connect(sockClt,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));//建立一个网络链接,非阻塞方式,链接不上直接返回-1
if(err==-1)//拉链不上服务器端
continue;
char sendBuf[256];//发达的数据缓冲区
sprintf(sendBuf,"Welcome to socket programing world ! at:clienter %d",*(int*)param);
//发送数据
err=send(sockClt,sendBuf,strlen(sendBuf)+1,0);//,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)) <<endl;;
//cout<<"send:"<<err<<endl;
closesocket(sockClt);//关闭此次链接
Sleep(300*(rand()%5));
}
return 0;
}
int main()
{
int p0=0,p1=1,p2=2;
CreateThread(0,0,Servicer,0,0,0);//建立一个服务端线程
CreateThread(0,0,Clienter,(void*)&p0,0,0) ;//建立了三个客户端线程,用以展示一个服务端对多个链接的服务
CreateThread(0,0,Clienter,(void*)&p1,0,0) ;
CreateThread(0,0,Clienter,(void*)&p2,0,0) ;
while(1);//主线程死循环
return 1;
}
- 网络通信编程初步:windows socket 程序示例
- Windows Socket编程示例-TCP示例程序
- Windows Socket编程示例-TCP示例程序
- Windows Socket编程示例-TCP示例程序
- Linux 网络程序编程初步 Socket
- 网络socket编程之TCP示例程序
- windows下socket 网络通信编程二
- Windows网络编程之Socket通信
- socket通信示例程序
- 网络编程 Socket编程指南及示例程序
- 网络通信 Socket 编程
- 初步实现网络socket编程
- Linux网络编程之UDP Socket程序示例
- Windows 网络编程基于TCP协议的Socket通信
- windows网络编程示例
- Windows Socket 网络编程
- windows socket 网络编程
- windows socket网络编程
- 脚本攻击防范策略完全篇
- python处理重定位数据
- Winforms: 不能在Validating时弹出有模式的对话框
- win2003结构化安全清单
- ACCESS的真假:三、往一个表中插入10万条记录的速度小于插入1万条记录吗?
- 网络通信编程初步:windows socket 程序示例
- Win2003网络服务器安全
- 保护SQL2000安全的十个技巧
- SQL Server 2000的安全配置
- 使index.jsp直接转入action
- 彻底删除系统备份后产生的C_PAN.GHO文件
- DiretX的一些标记
- java Integer的比较实践(转自blogjava)
- 部署基于Windows2008防火墙策略提升域安全