#include<iostream>//服务器程序,接受客户机发来的一行字符,改写成大写,返回给客户机
#include<Winsock2.h>//套接字头文件
//#include<stdio.h>
#include<string.h>
using namespace std;
int main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 1, 1 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
return 0;
}
if ( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE( wsaData.wVersion ) != 1 ) {
WSACleanup( );
return 0;
}
SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);
//参数1:地址族;参数2:socket类型;参数3:相关协议
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);//htons函数负责转换为网络字节序
bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
//将套接字绑定到本地地址和端口上。
listen(sockSrv,5);//设置监听模式,等待客户端请求
//第一个参数是套接字描述符;第二个为“等待连接队列的最大值”
SOCKADDR_IN addrClient;
int len=sizeof(SOCKADDR);//初始值为结构体长度
while(1)//设置一个死循环,一直运行,等待客户机请求
{
SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);
//另外设置一个套接字
//可以进行通信了
char sendBuf[100];
sprintf(sendBuf,"Welcome to service %s",inet_ntoa(addrClient.sin_addr));
send(sockConn,sendBuf,strlen(sendBuf)+1,0);
char recvBuf[100];
recv(sockConn,recvBuf,100,0);
cout<<recvBuf<<endl;
strupr(recvBuf);//转换为大写字母
cout<<recvBuf<<endl;
//将转换后的大写字母发送给客户机程序
//char upper[100];
//sprintf(sendBuf,recvBuf,inet_ntoa(addrClient.sin_addr));
send(sockConn,recvBuf,strlen(recvBuf)+1,0);
closesocket(sockConn);//关闭套接字,释放资源
}
return 0;
}
评论3
最新资源