网络程序设计实验4单播通信实验(3)

2019-04-14 20:12

WSACleanup(); return -1; } }

// 获取当前系统时间 SYSTEMTIME st; GetLocalTime(&st); char sDateTime[30]; sprintf(sDateTime,

\,st.wYear,st.wMonth,st.wDay,st.wHour,st.wMinute,st.wSecond);

// 打印输出的信息

printf(\Recv From Client [%s:%d] :%s\\n\, sDateTime, inet_ntoa(addrClient.sin_addr), addrClient.sin_port, buf);

/*if (buf[0] == 'q'&&buf[1] == 'u'&&buf[2] == 'i'&&buf[3] == 't') {

num--;

cout << \当前连接数:\ }*/

// 如果客户端发送quit字符串,则服务器退出 if(strcmp(buf, \) == 0) {

num--;

cout << \当前连接数:\ << num << endl;

retVal = send(sClient,\,strlen(\),0); break; }

else // 否则向客户端发送回显字符串 {

char msg[BUF_SIZE];

sprintf(msg, \, buf); while(true) {

// 向服务器发送数据

retVal = send(sClient, msg, strlen(msg),0); if(SOCKET_ERROR == retVal) {

int err = WSAGetLastError();

if(err == WSAEWOULDBLOCK) // 无法立即完成非阻塞套接字上的操作

{

Sleep(500);

continue; } else {

printf(\); closesocket(sClient); WSACleanup(); return -1; } }

break; }

} }

// 关闭套接字

closesocket(sClient); return 0; }

int _tmain(int argc, _TCHAR* argv[]) {

WSADATA wsd; // WSADATA变量,用于初始化Windows Socket SOCKET sServer; // 服务器套接字,用于监听客户端请求

SOCKET sClient; // 客户端套接字,用于实现与客户端的通信 int retVal; // 调用各种Socket函数的返回值

// 初始化套接字动态库

if(WSAStartup(MAKEWORD(2,2),&wsd) != 0) {

printf(\); return 1; }

// 创建用于监听的套接字

sServer = socket(AF_INET,SOCK_STREAM, IPPROTO_IP); if(INVALID_SOCKET == sServer) {

printf(\); WSACleanup(); return -1; }

// 设置套接字为非阻塞模式 int iMode = 1;

retVal = ioctlsocket(sServer, FIONBIO, (u_long FAR*) &iMode);

if(retVal == SOCKET_ERROR) {

printf(\); WSACleanup(); return -1; }

// 设置服务器套接字地址 SOCKADDR_IN addrServ;

addrServ.sin_family = AF_INET;

addrServ.sin_port = htons(9990); // 监听端口为9990 addrServ.sin_addr.S_un.S_addr = htonl(INADDR_ANY); // 绑定套接字sServer到本地地址,端口9990 retVal = bind(sServer,(const struct sockaddr*)&addrServ,sizeof(SOCKADDR_IN)); if(SOCKET_ERROR == retVal) {

printf(\); closesocket(sServer); WSACleanup(); return -1; }

// 监听套接字

retVal = listen(sServer, SOMAXCONN); if(SOCKET_ERROR == retVal) {

printf(\); closesocket(sServer); WSACleanup(); return -1; }

// 接受客户请求

printf(\);

int addrClientlen = sizeof(addrClient); // 循环等待 while(true) {

sClient = accept(sServer,(sockaddr FAR*)&addrClient,&addrClientlen); if(INVALID_SOCKET == sClient) {

int err = WSAGetLastError();

if(err == WSAEWOULDBLOCK) // 无法立即完成非阻塞套接字上的操作

{

Sleep(100); continue;

}

}

// 创建专用通信线程

num++;

cout << \当前连接数:\ << num << endl;

printf(\

connect %d,port:%d\\n\,sClient,ntohs(addrClient.sin_port));

CreateThread(NULL, NULL, AnswerThread, (LPVOID)sClient, 0,NULL); }

// 释放套接字

closesocket(sServer); WSACleanup();

// 暂停,按任意键退出 system(\); return 0; }


网络程序设计实验4单播通信实验(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:河南检察院面试冲刺:语言表达有技巧

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: