📄 server.cpp
字号:
// server.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "Winsock2.h"
#include "stdio.h"
int main(int argc, char* argv[])
{
SOCKET socketid;
struct sockaddr_in server;
SOCKET msgsocket;
struct sockaddr client;
char buffer[1024];
int rval;
//进行协商
WORD wVersionRequested;
WSADATA wsaData;
int err;
//使要求的版本为1.1
wVersionRequested=MAKEWORD(1,1);
err=WSAStartup(wVersionRequested, &wsaData);
if (err!=0)
{
//用户没有找到一个可以使用的DLL,返回
perror("there is no DLL to use");
return 0;
}
//确保Windows Sockets DLL支持1.1。
if ( (LOBYTE(wsaData.wVersion)!=1) || (HIBYTE(wsaData.wVersion)!=1) )
{
perror("there is not right DLL");
WSACleanup();
return 1;
}
//建立Sockets
socketid=socket(AF_INET,SOCK_STREAM,0);
if (socketid==INVALID_SOCKET)
{
perror("there is error in opening sockets\n");
return 2;
}
//使用端口号5050来命名服务器的Sockets
server.sin_family=AF_INET;
server.sin_port=htons(5050);
server.sin_addr.S_un.S_un_b.s_b1=192;
server.sin_addr.S_un.S_un_b.s_b2=168;
server.sin_addr.S_un.S_un_b.s_b3=17;
server.sin_addr.S_un.S_un_b.s_b4=204;
if ( bind(socketid, (sockaddr *)&server,sizeof(server))<0)
{
perror("there is error in binding sockets\n");
return 3;
}
//输出端口号
int length=sizeof(server);
if(getsockname(socketid,(struct sockaddr *)&server,&length)<0)
{
perror("there is error in getting name");
return 4;
}
printf("socket port %d\n",ntohs(server.sin_port));
//开始接收连接
listen(socketid,5);
//进入一个死循环
int len=sizeof(struct sockaddr);
do
{
msgsocket=accept(socketid,(struct sockaddr *)&client,(int*)&len);
if (msgsocket==INVALID_SOCKET)
{
perror("there is error in open new sockets");
break;
}
else
{
memset(buffer,0,sizeof(buffer));
if ( (rval=recv(msgsocket,buffer,1024,0))==-1 )
{
perror("there is error in recving");
break;
}
if (rval==0)
printf("ending connection");
else
printf("-->%s\n",buffer);
}
closesocket(msgsocket);
}while(TRUE);
closesocket(socketid);
WSACleanup();
return 100;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -