// WindowsSocketServer.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
#include <Windows.h>
#include <Winsock2.h>#pragma comment(lib,"Ws2_32.lib")using namespace std;
#define PORT 8081
#define IP_ADDRESS "172.16.20.181"
DWORD WINAPI ClientThread(LPVOID lpParameter){SOCKET ClientSocket = (SOCKET)lpParameter;int Ret = 0;char RecvBuffer[MAX_PATH];while ( true ){memset(RecvBuffer, 0x00, sizeof(RecvBuffer));Ret = recv(ClientSocket, RecvBuffer, MAX_PATH, 0);if ( Ret == 0 || Ret == SOCKET_ERROR ) {cout<<"客户端退出!"<<endl;break;}cout<<"接收到客户信息为:"<<RecvBuffer<<endl;// send msg to clientRet = send(ClientSocket, RecvBuffer, (int)strlen(RecvBuffer), 0);if ( Ret == SOCKET_ERROR ){cout<<"Send Info Error::"<<GetLastError()<<endl;break;}cout<<"After Send Msg:"<<RecvBuffer<<endl;}return 0;}int main(int argc, char* argv[]){WSADATA  Ws;SOCKET ServerSocket, ClientSocket;struct sockaddr_in LocalAddr, ClientAddr;int Ret = 0;int AddrLen = 0;HANDLE hThread = NULL;//Init Windows Socket//The WSAStartup function initiates use of WS2_32.DLL by a process.if ( WSAStartup(MAKEWORD(2,2), &Ws) != 0 ){cout<<"Init Windows Socket Failed::"<<GetLastError()<<endl;return -1;}//Create SocketServerSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if ( ServerSocket == INVALID_SOCKET ){cout<<"Create Socket Failed::"<<GetLastError()<<endl;return -1;}//the address of family specificationLocalAddr.sin_family = AF_INET;//The inet_addr function converts a string containing an (Ipv4) Internet Protocol dotted address into a proper address for the IN_ADDR structure.LocalAddr.sin_addr.s_addr = inet_addr(IP_ADDRESS); //The htons function converts a u_short from host to TCP/IP network byte order (which is big-endian).LocalAddr.sin_port = htons(PORT);//Sets buffers to a specified character.memset(LocalAddr.sin_zero, 0x00, 8);//Bind Socket,The bind function associates a local address with a socket.Ret = bind(ServerSocket, (struct sockaddr*)&LocalAddr, sizeof(LocalAddr));if ( Ret != 0 ){cout<<"Bind Socket Failed::"<<GetLastError()<<endl;return -1;}//The listen function places a socket in a state in which it is listening for an incoming connection.Ret = listen(ServerSocket, 10);if ( Ret != 0 ){cout<<"listen ClientSocket Failed::"<<GetLastError()<<endl;return -1;}cout<<"服务端已经启动"<<endl;while ( true ){AddrLen = sizeof(ClientAddr);//The accept function permits an incoming connection attempt on a socket.ClientSocket = accept(ServerSocket, (struct sockaddr*)&ClientAddr, &AddrLen);if ( ClientSocket == INVALID_SOCKET ){cout<<"Accept Failed::"<<GetLastError()<<endl;break;}//The inet_ntoa function converts an (Ipv4) Internet network address into a string in Internet standard dotted format.cout<<"客户端连接::"<<inet_ntoa(ClientAddr.sin_addr)<<":"<<ClientAddr.sin_port<<endl;//Call this function to create a thread that can use CRT functions.hThread = CreateThread(NULL, 0, ClientThread, (LPVOID)ClientSocket, 0, NULL);if ( hThread == NULL ){cout<<"Create Thread Failed!"<<endl;break;}CloseHandle(hThread);}closesocket(ServerSocket);closesocket(ClientSocket);WSACleanup();return 0;}

// WindowsSocketClient.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
#include <Windows.h>
#include <Winsock2.h>#pragma comment(lib,"Ws2_32.lib")using namespace std;#define PORT 8081
#define IP_ADDRESS "172.16.20.181"int _tmain(int argc, _TCHAR* argv[])
{WSADATA  Ws;SOCKET ClientSocket;struct sockaddr_in ServerAddr;int Ret = 0;int AddrLen = 0;HANDLE hThread = NULL;char SendBuffer[MAX_PATH];//Init Windows Socket//The WSAStartup function initiates use of WS2_32.DLL by a process.if ( WSAStartup(MAKEWORD(2,2), &Ws) != 0 ){cout<<"Init Windows Socket Failed::"<<GetLastError()<<endl;return -1;}//Create SocketClientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if ( ClientSocket == INVALID_SOCKET ){cout<<"Create Socket Failed::"<<GetLastError()<<endl;return -1;}ServerAddr.sin_family = AF_INET;ServerAddr.sin_addr.s_addr = inet_addr(IP_ADDRESS);ServerAddr.sin_port = htons(PORT);memset(ServerAddr.sin_zero, 0x00, 8);//Bind Socket,The bind function associates a local address with a socket.//Ret = bind(ClientSocket, (struct sockaddr*)&ServerAddr, sizeof(ServerAddr));//if ( Ret != 0 )//{//    cout<<"Bind Client Socket Failed::"<<GetLastError()<<endl;//    //return -1;//}
Ret = connect(ClientSocket,(struct sockaddr*)&ServerAddr, sizeof(ServerAddr));if ( Ret == SOCKET_ERROR ){cout<<"Connect Error::"<<GetLastError()<<endl;// return -1;
     }else{cout<<"连接成功!"<<endl;}while ( true ){cin.getline(SendBuffer, sizeof(SendBuffer));Ret = send(ClientSocket, SendBuffer, (int)strlen(SendBuffer), 0);if ( Ret == SOCKET_ERROR ){cout<<"Send Info Error::"<<GetLastError()<<endl;break;}char recvBuf[500];int byteRecv = recv(ClientSocket, recvBuf, MAX_PATH, 0);if (byteRecv != 0){recvBuf[byteRecv] = 0;cout << "From server: " << recvBuf << endl;}}closesocket(ClientSocket);WSACleanup();system("pause");return 0;}

转载于:https://www.cnblogs.com/kingdom_0/articles/2558131.html

C++基础--简单Socket通信实例相关推荐

  1. Java Socket 通信实例 - 转载

    基于Tcp协议的简单Socket通信实例(JAVA) 好久没写博客了,前段时间忙于做项目,耽误了些时间,今天开始继续写起~ 今天来讲下关于Socket通信的简单应用,关于什么是Socket以及一些网络 ...

  2. 笔记2:VC++ socket通信实例

    VC++ socket通信实例 网络中进程之间如何通信   首要解决的问题是如何唯一标识一个进程,在本地可以通过进程PID来唯一标识一个进程,但是在网络中这是行不通的.其实TCP/IP协议族已经帮我们 ...

  3. java socket发送定长报文_一个基于TCP协议的Socket通信实例

    原标题:一个基于TCP协议的Socket通信实例 1. 前言 一般接口对接多以http/https或webservice的方式,socket方式的对接比较少并且会有一些难度.正好前段时间完成了一个so ...

  4. android socket通信如何抓取,安卓Socket通信实例(客户端、服务端)

    安卓Socket通信实例 本文摘自:https://whatsblog.icu/index.php/Android/17.html 1.Socket通信必须知道的地方 1.首先,Socket通信采用T ...

  5. Java 网络实例三(获取URL响应头的日期信息、获取URL响应头信息、解析URL、ServerSocket和Socket通信实例)

    获取 URL响应头的日期信息 以下实例演示了如何使用 HttpURLConnection 的 httpCon.getDate() 方法来获取 URL响应头的日期信息: import java.net. ...

  6. Linux系统下实现基于TCP/IP协议的简单Socket通信

    Linux系统下实现基于TCP/IP协议的简单Socket通信 网络套接字Socket Socket概念 主机字节序和网络字节序 Sockaddr地址结构 Socket实现客户端.服务端通信 服务端程 ...

  7. socket通信实例(简单的聊天室)

    这次程序运用socket通信实现一个简单的聊天室. 一开始是想在控制台实现,但遇到问题是输出和输入都在一个界面上,最后还是编一个swing程序来实现. 服务器对每一个客户端分配一个线程,run函数实现 ...

  8. c#Socket通信实例

    一.Socket通信简介 1.按惯例先来介绍下socket Windows中的很多东西都是从Unix领域借鉴过来的,Socket也是一样.在Unix中,socket代表了一种文件描述符(在Unix中一 ...

  9. python安卓开发实例_python服务器与android客户端socket通信实例

    本文实例讲述了python服务器与android客户端socket通信的方法.分享给大家供大家参考.具体实现方法如下: 首先,服务器端使用python完成,下面为python代码: #server.p ...

最新文章

  1. 编译报错field has incomplete type
  2. 使用curl下载上传ftp
  3. qt 文件 时间 倒序排列_win7电脑敬业签便签软件分类标签里的内容如何按提醒时间排列?...
  4. Ruby离线安装gem依赖
  5. php设计模式及案例分析,一个案例来认识PHP经典设计模式 | 张先生博客
  6. MongoDB 主从架构
  7. python requests请求失败重试_Python:requests:详解超时和重试
  8. 折纸机器人的步骤图解_简单折纸:折叠小吉普车(步骤图解)
  9. 如何在csdn网站搜索自己写的博客文章
  10. 纯js浏览器h5调用摄像头扫描识别解析 条形码+二维码
  11. Word插入页码简单方法
  12. 外卖行业现状分析_2020餐饮外卖行业市场前景及现状分析
  13. 康定游记-宝宝征服4300米海拔折多山
  14. java jdbc程序,Java构建JDBC应用程序的操作
  15. 如何快速通过pmp考试求攻略
  16. 无线宽带好用吗?有哪些优势?
  17. 你了解HTTP2协议吗?(二)
  18. loopback地址是什么?怎么配置
  19. Netty学习二:Netty整体框架
  20. Git提交记住用户名和密码

热门文章

  1. 【模型解读】resnet中的残差连接,你确定真的看懂了?
  2. 掸邦的首府---东枝【图文】
  3. Factory Method工厂方法模式
  4. 使用Docker打包发布Django应用
  5. 算法系列之五 希尔排序
  6. memcpy实例(一)
  7. js中使用进行字符串传参
  8. 几个主流的Java连接池整理
  9. heritrix 相关
  10. MySQL 当记录不存在时insert,当记录存在时update