使用TCP+winsock写的一个简单服务器程序(转)
来源:互联网 发布:电视网络机顶盒怎么用 编辑:程序博客网 时间:2024/06/04 08:39
本代码用VS2008编写:
- //先打开服务器端,服务器在执行完recv()后堵塞,等待接收数据...
- #include <winsock2.h>
- #include <stdio.h>
- #pragma comment(lib,"WS2_32.LIB")
- void main()
- {
- WSADATA wsaData;
- SOCKET ListeningSocket;
- SOCKET NewConnection;
- SOCKADDR_IN ServerAddr;
- SOCKADDR_IN ClientAddr;
- char RecviverBuf[1024];
- int BufLength = 1024;
- int Port = 8060;
- int Ret;
- //初始化Winsock版本2.2
- if((Ret =WSAStartup(MAKEWORD(2,2),&wsaData)) != 0)
- {
- printf("ERROR:WSAStartup failed with %d/n",Ret);
- return;
- }
- //创建一个新的套接字来监听客户机链接
- if(INVALID_SOCKET == (ListeningSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)))
- {
- printf("ERROR:SOCKET failed with %d/n",WSAGetLastError());
- WSACleanup();
- return;
- }
- //建立一个SOCKADDR_IN结构,这个结构告知bind我们想得到的8060端口监听所有接口上的连接
- ServerAddr.sin_family = AF_INET;
- ServerAddr.sin_port = htons(Port);
- ServerAddr.sin_addr.s_addr = htonl(INADDR_ANY);
- //使用bind将这个地址信息和套接字关联起来
- if(SOCKET_ERROR == bind(ListeningSocket,(SOCKADDR *)&ServerAddr,sizeof(ServerAddr)))
- {
- printf("ERROR:bind failed with %d/n",WSAGetLastError());
- closesocket(ListeningSocket);
- WSACleanup();
- return;
- }
- //监听客户机连接。这里使用5个backlog,许多应用程序一般都使用这个数量
- if(SOCKET_ERROR == listen(ListeningSocket,5))
- {
- printf("ERROR:listen failed with %d/n",WSAGetLastError());
- closesocket(ListeningSocket);
- WSACleanup();
- return;
- }
- //连接到达时,接受一个新的连接
- int ClientAddrLen = sizeof(ClientAddr);
- if(INVALID_SOCKET == (NewConnection = accept(ListeningSocket,(SOCKADDR *)&ClientAddr,&ClientAddrLen)))
- {
- printf("ERROR:accept failed with %d/n",WSAGetLastError());
- closesocket(ListeningSocket);
- WSACleanup();
- return;
- }
- printf("accept succeed!/n");
- //接受数据
- //注意recv()/send()和recvfrom()/sendto()的区别:使用recv()/send()需要先建立连接,而recvfrom()/sendto()不需要先建立连接...
- if(SOCKET_ERROR == recv(NewConnection,RecviverBuf,BufLength,0))
- {
- printf("ERROR:recv failed with %d/n",WSAGetLastError());
- closesocket(ListeningSocket);
- WSACleanup();
- return;
- }
- printf("recv succeed!/n");
- //显示接收到的数据
- for(int id=0; id<5 ;++id)
- printf("%c",RecviverBuf[id]);
- //完成接受新连接后,应该用closesocket API关闭这些套接字
- closesocket(NewConnection);
- closesocket(ListeningSocket);
- //应用程序完成对连接的处理后,调用WSACleanup
- WSACleanup();
- }
- 使用TCP+winsock写的一个简单服务器程序
- 使用TCP+winsock写的一个简单服务器程序(转)
- 使用TCP+winsock写的一个简单客户端程序(转)
- 使用TCP+winsock写的一个简单客户端程序
- 使用winsock+UDP写的一个简单发送端程序(转)
- 使用winsock+UDP写的一个简单接收端程序(转)
- 使用winsock+UDP写的一个简单接收端程序
- 使用winsock+UDP写的一个简单发送端程序
- 为初学者写的Winsock编程--一个简单的TCP服务器
- win32汇编实现一个简单的TCP服务端程序(WinSock的简单认知应用)
- Node.js 写一个简单的服务器和TCP服务器,以及sumblimeText3简单使用
- 使用jrtplib写的一个简单服务器和客户端程序
- qt写的一个简单的tcp服务器程序,可以接受消息发送数据
- 简单的 winsock tcp
- 一个用Java写的简单的TCP聊天程序
- 一个用Java写的简单的TCP聊天程序
- 如何使用TCP/IP与服务器进行通信-一个简单的聊天程序
- 如何使用TCP/IP与服务器进行通信-一个简单的聊天程序
- 测试alter table shrink space compact cascade及学习user_tables相关列的含义
- 《微型电脑应用》2011年第11期刊登出《万能数据库查询分析器中的事务管理在Oracle中的应用》
- 如何做优秀的营销员呢
- PowerDesigner生成MySQL5.0中带有Index的代码有错误
- Oracle动态修改表的字段
- 使用TCP+winsock写的一个简单服务器程序(转)
- Flash p2p服务(代号Cirrus)新加的两个特性
- 利用PHP模版生成静态的HTML
- 一个人不去逼自己一把,不知道自己有多优秀。
- makefile注意点问题
- wp7 软键盘高度
- linux queue 用法
- 使用TCP+winsock写的一个简单客户端程序(转)
- error C2065: 'IDD_WEBCAM_DIALOG' : undeclared identifier对话框未定义