TCP的Socket技术之服务器端
来源:互联网 发布:xp 数据执行保护 编辑:程序博客网 时间:2024/06/06 20:40
XX:那飘过的100~_~{2014/10/02 16:12}
流式套接字(SOCK_STREAM):提供面向连接、可靠的数据传输服务、数据无差错、无重复的发送、且按发送顺序接受。程序的设计思路
服务器端:
流程:WSAStartup()->socket()->bind()->listen()->accept()->send()
(1)创建套接字
(2)将套接字绑定到一个本地地址和端口上
(3)将套接字设为监听模式,准备接受客户端的请求
(4)等待客户端请求的到来,当请求到来后,接受连接请求,返回一个对应与此次连接的套接字
(5)用返回的套接字与客户端进行通讯
(6)返回,等待另一个客户端的连接请求
(7)关闭套接字
// socketTcp.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include "tchar.h"#pragma comment(lib,"wsock32.lib")#include <stdio.h>#include <winsock2.h>#define MAX_SER 10#define HOST_PATH 256#define HOSTNAME_SIZE HOST_PATHchar hostName[MAX_PATH]={0};unsigned short maxService;unsigned short port;void Service(LPVOID lpv);int LoopControl(SOCKET llistenfd,int isMultiTasking);void initial();int initSockets(void);//初始化Windows Socketint main(int argc, char * argv[]) {SOCKET listenFd; struct sockaddr_in serverAddr;int err;initial();initSockets();//创建socketlistenFd=socket(PF_INET,SOCK_STREAM,0);if(listenFd==INVALID_SOCKET){printf("error:out of socket resource \n");return 1;}//bind本机的端口serverAddr.sin_family=PF_INET;//协议类型是INETserverAddr.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//本机IPserverAddr.sin_port=htons(port);//绑定端口为5054err=bind(listenFd,(const struct sockaddr *)&serverAddr,sizeof(serverAddr));if(err==INVALID_SOCKET){printf("error: unable to bind socket \n");return 1;}//listen 监听端口err=listen(listenFd,3);if(err==INVALID_SOCKET){printf("error: listen socket failed \n");return 1;}printf("listen......");LoopControl(listenFd,1);printf("server is down \n");WSACleanup();return 0;}void initial(){maxService=3;port=5054;} /* *Winsock服务初始化 */int initSockets(void){WSADATA wsaData;WORD sockVersion; //typedef unsigned short WORD(16)int err;sockVersion=MAKEWORD(2,2);err=WSAStartup(sockVersion,&wsaData); if(err!=0){printf("error %d :winsock not avaliable\n",err);}printf("environemnt invaild success.....\n");return 0;}/*** 等待客户端的连接*/int LoopControl(SOCKET listenfd,int isMultiTasking){SOCKET acceptfd;struct sockaddr_in clientAddr;//客户端地址信息int err;int serverNum=0;HANDLE handles[MAX_SER];int nSize;nSize=sizeof(clientAddr);int myID;//存在固定的次数[服务次数小于最大服务次数]while(serverNum<maxService){acceptfd=accept(listenfd,(struct sockaddr *)&clientAddr,&nSize);//接收客户连接的准备if(acceptfd==INVALID_SOCKET){printf("error:accept failed \n");return 1;}printf("accepted connection from client at %s \n",inet_ntoa(clientAddr.sin_addr));if(isMultiTasking){handles[serverNum]=CreateThread(NULL,1000,(LPTHREAD_START_ROUTINE)Service,(LPVOID)acceptfd,0,(unsigned long *)&myID);}else{Service((LPVOID)acceptfd);}serverNum++;}if(isMultiTasking){err=WaitForMultipleObjects(maxService,handles,TRUE,INFINITE);printf("last thread to finish was thread # %d \n",err);}return 0;}/**接收客户端的数据,AND向客户端发送数据*/void Service(LPVOID lpv){SOCKET acceptfd=(SOCKET)lpv;const char *msg="message have recived";char response[4096];memset(response,0,sizeof(response));while(acceptfd!=SOCKET_ERROR){int result=recv(acceptfd,response,sizeof(response),0);//接受客户机的数据if(result>0){printf("from client: %s ",response);send(acceptfd,msg,strlen(msg)+1,0);}}closesocket(acceptfd);}
在浏览器中输入本地ip:5054,查看运行效果。或者使用netstat -a查看端口状态
1 0
- TCP的Socket技术之服务器端
- MFC Socket网络编程之TCP服务器端
- 基于TCP的客户端、服务器端socket编程
- Socket TCP 服务器端
- socket-tcp协议-服务器端
- TCP的socket的服务器端和客户端实例(linux下)
- VC++中Socket编程的实现---【TCP服务器端】
- VC++中Socket编程的实现-TCP服务器端
- VC++中Socket编程的实现-TCP服务器端
- C++ 简单的 Tcp 实现[socket] 服务器端与客户端通信
- Java之Socket的TCP
- Socket TCP技术详解
- Socket TCP技术详解
- Socket TCP技术详解
- 【Java Socket】入门系列 3.2.编程实现基于 TCP 的 Socket 通信 — 服务器端和客户端
- linux socket tcp server 解决客户端socket断开后, 服务器端进程退出的问题
- SOCKET服务器端的操作
- Socket服务器端的代码
- C++中的new、operator new与placement new
- 树状数组应用之——求逆序对
- Django 1.7 初级教程or学习笔记(三)
- A* \IDA* 分析总结
- 在线学习网站整理
- TCP的Socket技术之服务器端
- 【coursera 学习笔记】An Introduction to Interactive Programming in Python--week0
- 树状数组应用之——区间修改 点查询
- hdu3449 有依赖的背包问题
- Reverse word in a string [leetcode]
- java基础之IO流中的PipedStream管道流和RandomAcessFile
- java的反射机制
- C和C++中左值和右值得区别以及++前置和后置的区别
- Z-score模型