WIN32 socket编程
2015-10-15 16:23
381 查看
服务端
#include "stdafx.h" #include <Winsock2.h> #include <stdio.h> #include <stdlib.h> #include <iostream> #define SVCPORT 12345 #pragma comment(lib, "Ws2_32.lib") using namespace std; int _tmain(int argc, _TCHAR* argv[]) { //初始化socket编程环境 WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD( 1, 1 ); err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0 ) { return 0; } if ( LOBYTE( wsaData.wVersion ) != 1 || HIBYTE( wsaData.wVersion ) != 1 ) { WSACleanup( ); return 0; } //创建Tcp服务器socket SOCKET sockServer = socket(AF_INET, SOCK_STREAM, 0); //服务器地址 SOCKADDR_IN addServer; addServer.sin_addr.S_un.S_addr = htonl(INADDR_ANY) ; addServer.sin_family = AF_INET ; addServer.sin_port = htons(SVCPORT) ; //将socket与地址绑定在一起 int err = bind(sockServer, (SOCKADDR*)&addServer, sizeof(SOCKADDR)); if ( SOCKET_ERROR == err ) { cout<<"绑定失败: "<< WSAGetLastError() << endl; return 0; } //开始监听客户端请求,最大连接数为100 listen(sockServer, 100); //用于存放客户端地址 SOCKADDR_IN addClient; int len = sizeof(SOCKADDR_IN); //不断的接收客户端请求socket SOCKET sockConn; cout << "接收客户端请求...\n"; sockConn = accept(sockServer, (SOCKADDR*)&addClient, &len); cout << "接收结束\n"; //发送数据 char sendBuf[100] ; memset(sendBuf, 0, 100); int r = 0; while (r != SOCKET_ERROR ) { sprintf( sendBuf , "欢迎%s连接上来:" , inet_ntoa(addClient.sin_addr) ) ; printf("服务端开始发送数据:%s...\n",sendBuf); r = send( sockConn , sendBuf , strlen(sendBuf)+1 , 0 ) ; //接收数据 char recvBuf[100] ; printf("服务端接收数据...\n"); r = recv( sockConn , recvBuf , 100 , 0 ) ; printf("服务端接收结束,接收到数据:%s...\n", recvBuf); } printf("连接失败,程序退出\n"); system("PAUSE"); //关闭socket closesocket( sockConn ) ; //清理socket编程环境 WSACleanup() ; return 0; }
客户端
#include "stdafx.h" #include <Winsock2.h> #include <stdio.h> #include <stdlib.h> #include <iostream> #pragma comment(lib, "Ws2_32.lib") #define SVCPORT 12345 using namespace std; int _tmain(int argc, _TCHAR* argv[]) { //初始化socket编程环境 WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD( 1, 1 ); err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0 ) { return 0; } if ( LOBYTE( wsaData.wVersion ) != 1 || HIBYTE( wsaData.wVersion ) != 1 ) { WSACleanup( ); return 0; } //建立客户端socket SOCKET socketClient = socket(AF_INET, SOCK_STREAM, 0); //服务器地址 SOCKADDR_IN addrServer; addrServer.sin_addr.S_un.S_addr = inet_addr("192.168.0.200"); addrServer.sin_family = AF_INET; addrServer.sin_port = htons(SVCPORT); //连接服务器 //等待接收服务器的响应 char recvBuf[1000]; memset(recvBuf, 0 , 1000); connect(socketClient, (SOCKADDR*)&addrServer, sizeof(SOCKADDR)); int r = 0; while(r != SOCKET_ERROR) { cout << "开始接收...\n"; r = recv( socketClient , recvBuf , 100 , 0 ) ; printf("---------------接收结束--------------\n"); printf( "接收到来自服务器的数据为: %s\n" , recvBuf ) ; char sendBuf[1000] ; printf("请输入要发送的1000个字符的内容: "); gets(sendBuf); printf("发送数据中...\n"); r = send( socketClient , sendBuf , strlen(sendBuf)+1 , 0 ) ; printf("发送完毕,等待服务器接收\n"); } printf("连接服务器失败! 程序将退出\n"); system("PAUSE"); closesocket( socketClient ) ; WSACleanup() ; return 0; }
相关文章推荐
- java-模拟tomcat服务器
- Linux socket 初步
- java socket 注意的地方
- java socket 注意的地方
- C#基于socket模拟http请求的方法
- 简单的Ruby中的Socket编程教程
- Socket不能选择本地IP连接问题如何解决
- C#之Socket操作类实例解析
- 使用C#来编写一个异步的Socket服务器
- C#使用Socket快速判断数据库连接是否正常的方法
- 科学知识:理解socket
- win32下进程间通信(共享内存)实例分析
- php与flash as3 socket通信传送文件实现代码
- 解决time_wait强制关闭socket
- C#使用Socket上传并保存图片的方法
- 深入php socket的讲解与实例分析
- Linux网络编程之UDP Socket程序示例
- Linux网络编程之socket文件传输示例
- filezilla Failed to create listen socket on port 21 for IPv4 解决办法
- php socket方式提交的post详解