1.服务器端代码:

#include

#include

#pragma comment(lib, "ws2_32.lib")

#define CONNECT_NUM_MAX 10

using namespace std;

int main()

{

//加载套接字库

WSADATA wsaData;

int iRet = 0;

iRet = WSAStartup(MAKEWORD(2, 2), &wsaData);

if (iRet != 0)

{

cout << "WSAStartup(MAKEWORD(2, 2), &wsaData) execute failed!" << endl;;

return -1;

}

if (2 != LOBYTE(wsaData.wVersion) || 2 != HIBYTE(wsaData.wVersion))

{

WSACleanup();

cout << "WSADATA version is not correct!" << endl;

return -1;

}

//创建套接字

SOCKET serverSocket = socket(AF_INET, SOCK_STREAM, 0);

if (serverSocket == INVALID_SOCKET)

{

cout << "serverSocket = socket(AF_INET, SOCK_STREAM, 0) execute failed!" << endl;

return -1;

}

//初始化服务器地址族变量

SOCKADDR_IN addrSrv;

addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);

addrSrv.sin_family = AF_INET;

addrSrv.sin_port = htons(6000);

//绑定

iRet = bind(serverSocket, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));

if (iRet == SOCKET_ERROR)

{

cout << "bind(serverSocket, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR)) execute failed!" << endl;

return -1;

}

//监听

iRet = listen(serverSocket, CONNECT_NUM_MAX);

if (iRet == SOCKET_ERROR)

{

cout << "listen(serverSocket, 10) execute failed!" << endl;

return -1;

}

//等待连接_接收_发送

SOCKADDR_IN clientAddr;

int len = sizeof(SOCKADDR);

while (1)

{

SOCKET connSocket = accept(serverSocket, (SOCKADDR*)&clientAddr, &len);

if (connSocket == INVALID_SOCKET)

{

cout << "accept(serverSocket, (SOCKADDR*)&clientAddr, &len) execute failed!" << endl;

return -1;

}

char sendBuf[100];

sprintf_s(sendBuf, "Welcome %s", inet_ntoa(clientAddr.sin_addr));

send(connSocket, sendBuf, strlen(sendBuf)+1, 0);

char recvBuf[100];

recv(connSocket, recvBuf, 100, 0);

printf("%s\n", recvBuf);

closesocket(connSocket);

}

system("pause");

return 0;

}

2.客户端代码:

#include

#include

using namespace std;

#pragma comment(lib, "ws2_32.lib")

int main()

{

//加载套接字库

WSADATA wsaData;

int iRet =0;

iRet = WSAStartup(MAKEWORD(2, 2), &wsaData);

if (iRet != 0)

{

cout << "WSAStartup(MAKEWORD(2, 2), &wsaData) execute failed!" << endl;

return -1;

}

if (2 != LOBYTE(wsaData.wVersion) || 2 != HIBYTE(wsaData.wVersion))

{

WSACleanup();

cout << "WSADATA version is not correct!" << endl;

return -1;

}

//创建套接字

SOCKET clientSocket = socket(AF_INET, SOCK_STREAM, 0);

if (clientSocket == INVALID_SOCKET)

{

cout << "clientSocket = socket(AF_INET, SOCK_STREAM, 0) execute failed!" << endl;

return -1;

}

//初始化服务器端地址族变量

SOCKADDR_IN srvAddr;

srvAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");

srvAddr.sin_family = AF_INET;

srvAddr.sin_port = htons(6000);

//连接服务器

iRet = connect(clientSocket, (SOCKADDR*)&srvAddr, sizeof(SOCKADDR));

if (0 != iRet)

{

cout << "connect(clientSocket, (SOCKADDR*)&srvAddr, sizeof(SOCKADDR)) execute failed!" << endl;

return -1;

}

//接收消息

char recvBuf[100];

recv(clientSocket, recvBuf, 100, 0);

printf("%s\n", recvBuf);

//发送消息

char sendBuf[100];

sprintf_s(sendBuf, "Hello, This is client %s", "兔子");

send(clientSocket, sendBuf, strlen(sendBuf)+1, 0);

//清理

closesocket(clientSocket);

WSACleanup();

system("pause");

return 0;

}

3.程序运行截图:

window下c语言c s通信,c++ Windows Socket实现最简单的C/S网络通信(TCP)相关推荐

  1. java socket通信 客户端_JavaのSocket编程之简单客户端与服务器端通信

    Socket编程之简单客户端与服务器端通信 socket 通常用来实现客户端和服务端的连接,socket 是Tcp/Ip协议的一个十分流行的编程界面,一个socket 由一个Ip地址和一个端口号唯一确 ...

  2. Linux下C语言UDP协议通信实践

    UDP和TCP协议一样,都是传输层协议.是无连接的,不安全的,报式传输层协议,通信过程默认也是阻塞的.其通信特点主要如下: (1)不需要建立连接 ,所以不需要进行 connect () 操作 (2)每 ...

  3. Socket编程(简单(C++)实现TCP通信)

    一.什么是socket? socket顾名思义就是套接字的意思,用于描述地址和端口,是一个通信链的句柄.应用程序通过socket向网络发出请求或者回应. socket编程有三种,流式套接字(SOCK_ ...

  4. window系统下C语言找不到fork()函数

    window系统下C语言找不到fork()函数 有次模拟进程时,想在window系统下调用fork()函数,但是就是引入相关头文件都无法找到函数,一开始是怀疑是否引入的头文件有误或者缺失,发现并没有缺 ...

  5. 半双工通信是指c语言,Linux下C语言实现半双工的UDP通信

    ------------恢复内容开始------------ Linux下C语言实现半双工的UDP通信 1.单向通信:又称为单工通信,即只能有一个方向的通信而没有反方向的交互.无线电广播或有线电广播以 ...

  6. 第1章 Window下VSCode的C语言开发环境搭建 (一)

    文章目录 文档视频讲解链接地址 第01章 开发环境搭建 1.1 C语言开发环境搭建 1. 常用的C语言开发环境介绍 VC++ 6.0 VS 2019 Clion DevC++ vim编辑 VSCode ...

  7. linux下c语言使用mac地址进行socket通信

    linux下c语言使用mac地址进行socket通信 server端: #include <unistd.h> #include <stdio.h> #include < ...

  8. 【BigData】Scala语言的简要介绍以及在window下安装Scala

    Spark是专为大规模数据处理而设计的快速通用的计算引擎,它是用Scala语言开发实现的.大数据技术本身就是数据计算的技术,而Scala既有面向对象组织项目工程的能力,又具备计算数据的功能,同时与Sp ...

  9. linux操作系统下 c语言编程入门

    linux操作系统下 c语言编程入门 (一)目录介绍 1)Linux程序设计入门--基础知识 2)Linux程序设计入门--进程介绍 3)Linux程序设计入门--文件操作 4)Linux程序设计入门 ...

  10. [转] linux操作系统下c语言编程入门

    (一)目录介绍 1)Linux程序设计入门--基础知识  2)Linux程序设计入门--进程介绍  3)Linux程序设计入门--文件操作  4)Linux程序设计入门--时间概念  5)Linux程 ...

最新文章

  1. linux - centos yum安装LAMP环境
  2. 学习OpenCV——配置CUDA环境
  3. elasticsearch-5.0.0初见
  4. java中执行js代码
  5. 开发者社区精选直播合集一览
  6. Effective Java~43. 方法引用优于Lambda
  7. 用 LSTM 做时间序列预测的一个小例子
  8. JSP自定义标签入门实例
  9. NOIP2013华容道
  10. excel软件php函数,文员常用的excel函数
  11. 天猫专卖店运营计划书
  12. catia二次开发c语言,CATIA二次开发1_VB语言基础语法
  13. ToolBar修改返回按钮图标,CollapsingToolbarLayout修改文字居中
  14. 入行 AI,如何选个脚踏实地的岗位
  15. 深度学习从入门到精通——生成对抗网络原理
  16. Android动画详解之Android 动画属性和实现方法之帧动画(二)
  17. Server returns invalid timezone. Go to ‘Advanced‘ tab and set ‘serverTimezon‘ 错误
  18. tomcatServlet
  19. 验证性分析---相关假设检验
  20. html博客代码 看视频教程,【博客教程】认识HTML代码

热门文章

  1. 【气动学】基于matlab GUI龙格库塔算法外弹道仿真【含Matlab源码 1053期】
  2. 【运动学】基于matlab斜抛物体水平射程+竖直射高【含Matlab源码 979期】
  3. java double 丢精度_Java中double类型精度丢失的问题
  4. mysql查看索引文件_MySql如何查看索引并实现优化
  5. order( )函数--R语言
  6. 无土栽培中的物联网技术应用
  7. Apache服务器和tomcat服务器有什么区别(转)
  8. Android -- 背景虚化
  9. Google工程师多图详解Android架构
  10. sql 随机函数newid()