socket服务器端

//服务器代码


#include "Winsock2.h"
#include "string.h"
#include "stdio.h"


#include "time.h"
#include "stdarg.h"
#include "stdlib.h"
#pragma   comment(lib,"Ws2_32");   


void errexit(const char*format,...)
{
va_list args;
va_start(args,format);
vfprintf(stderr,format,args);
va_end(args);


WSACleanup();
exit(1);
}




SOCKET passivesock(const char* service_name,const char* transport_type,int qlen){
struct servent *pse;
struct protoent *ppe;
struct sockaddr_in servaddr;


int sock_type;
SOCKET serv_sock;


memset(&servaddr,0,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_addr.S_un.S_addr=INADDR_ANY;


if(pse=getservbyname(service_name,transport_type))
servaddr.sin_port=htons(ntohs((u_short)pse->s_port));
else if((servaddr.sin_port=htons((u_short)atoi(service_name)))==0)
errexit("Cann't get %s",service_name);


if((ppe=getprotobyname(transport_type))==0)
errexit("Cann't get %s",transport_type);



if(strcmp(transport_type,"udp")==0)
sock_type=SOCK_DGRAM ;
else if(strcmp(transport_type,"tcp")==0)
sock_type=SOCK_STREAM;


else errexit("cann't support %s",transport_type);


serv_sock=socket(PF_INET,sock_type,ppe->p_proto); 


if(serv_sock==INVALID_SOCKET)
errexit("cann't create socket %d",WSAGetLastError());


bind(serv_sock,(sockaddr*)&servaddr,sizeof(sockaddr));
if( sock_type==SOCK_STREAM&&listen(serv_sock,qlen)==SOCKET_ERROR)
errexit(" cann't listen on %s port %d",service_name,WSAGetLastError());


return serv_sock;
}




void daytime(char buf[])
{
time_t now;
(void)time(&now);
sprintf(buf,"%s",ctime(&now));


}








int main(){


WSADATA wsadata;


WSAStartup(MAKEWORD(2,2), &wsadata);


char* stuname="peng zheng pu";
char* stuno="201122010139";
char buf[128];

struct sockaddr_in rsin  ;
SOCKET ssock;


SOCKET msock=passivesock("daytime","tcp",128);

while(1)
{

int alen=sizeof(rsin);
ssock=accept(msock,(struct sockaddr*)&rsin,&alen);

if(ssock==INVALID_SOCKET)
errexit("accept failed : %d",WSAGetLastError());
fprintf(stdout,"Received request from %s\n",inet_ntoa(rsin.sin_addr));
daytime(buf);
strcat(buf,stuname);
strcat(buf,stuno);
(void)send(ssock,buf,sizeof(buf),0);
(void)closesocket(ssock);
}


return 0;
}









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值