window下c语言c s通信,c++ Windows Socket实现最简单的C/S网络通信(TCP)
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)相关推荐
- java socket通信 客户端_JavaのSocket编程之简单客户端与服务器端通信
Socket编程之简单客户端与服务器端通信 socket 通常用来实现客户端和服务端的连接,socket 是Tcp/Ip协议的一个十分流行的编程界面,一个socket 由一个Ip地址和一个端口号唯一确 ...
- Linux下C语言UDP协议通信实践
UDP和TCP协议一样,都是传输层协议.是无连接的,不安全的,报式传输层协议,通信过程默认也是阻塞的.其通信特点主要如下: (1)不需要建立连接 ,所以不需要进行 connect () 操作 (2)每 ...
- Socket编程(简单(C++)实现TCP通信)
一.什么是socket? socket顾名思义就是套接字的意思,用于描述地址和端口,是一个通信链的句柄.应用程序通过socket向网络发出请求或者回应. socket编程有三种,流式套接字(SOCK_ ...
- window系统下C语言找不到fork()函数
window系统下C语言找不到fork()函数 有次模拟进程时,想在window系统下调用fork()函数,但是就是引入相关头文件都无法找到函数,一开始是怀疑是否引入的头文件有误或者缺失,发现并没有缺 ...
- 半双工通信是指c语言,Linux下C语言实现半双工的UDP通信
------------恢复内容开始------------ Linux下C语言实现半双工的UDP通信 1.单向通信:又称为单工通信,即只能有一个方向的通信而没有反方向的交互.无线电广播或有线电广播以 ...
- 第1章 Window下VSCode的C语言开发环境搭建 (一)
文章目录 文档视频讲解链接地址 第01章 开发环境搭建 1.1 C语言开发环境搭建 1. 常用的C语言开发环境介绍 VC++ 6.0 VS 2019 Clion DevC++ vim编辑 VSCode ...
- linux下c语言使用mac地址进行socket通信
linux下c语言使用mac地址进行socket通信 server端: #include <unistd.h> #include <stdio.h> #include < ...
- 【BigData】Scala语言的简要介绍以及在window下安装Scala
Spark是专为大规模数据处理而设计的快速通用的计算引擎,它是用Scala语言开发实现的.大数据技术本身就是数据计算的技术,而Scala既有面向对象组织项目工程的能力,又具备计算数据的功能,同时与Sp ...
- linux操作系统下 c语言编程入门
linux操作系统下 c语言编程入门 (一)目录介绍 1)Linux程序设计入门--基础知识 2)Linux程序设计入门--进程介绍 3)Linux程序设计入门--文件操作 4)Linux程序设计入门 ...
- [转] linux操作系统下c语言编程入门
(一)目录介绍 1)Linux程序设计入门--基础知识 2)Linux程序设计入门--进程介绍 3)Linux程序设计入门--文件操作 4)Linux程序设计入门--时间概念 5)Linux程 ...
最新文章
- linux - centos yum安装LAMP环境
- 学习OpenCV——配置CUDA环境
- elasticsearch-5.0.0初见
- java中执行js代码
- 开发者社区精选直播合集一览
- Effective Java~43. 方法引用优于Lambda
- 用 LSTM 做时间序列预测的一个小例子
- JSP自定义标签入门实例
- NOIP2013华容道
- excel软件php函数,文员常用的excel函数
- 天猫专卖店运营计划书
- catia二次开发c语言,CATIA二次开发1_VB语言基础语法
- ToolBar修改返回按钮图标,CollapsingToolbarLayout修改文字居中
- 入行 AI,如何选个脚踏实地的岗位
- 深度学习从入门到精通——生成对抗网络原理
- Android动画详解之Android 动画属性和实现方法之帧动画(二)
- Server returns invalid timezone. Go to ‘Advanced‘ tab and set ‘serverTimezon‘ 错误
- tomcatServlet
- 验证性分析---相关假设检验
- html博客代码 看视频教程,【博客教程】认识HTML代码
热门文章
- 【气动学】基于matlab GUI龙格库塔算法外弹道仿真【含Matlab源码 1053期】
- 【运动学】基于matlab斜抛物体水平射程+竖直射高【含Matlab源码 979期】
- java double 丢精度_Java中double类型精度丢失的问题
- mysql查看索引文件_MySql如何查看索引并实现优化
- order( )函数--R语言
- 无土栽培中的物联网技术应用
- Apache服务器和tomcat服务器有什么区别(转)
- Android -- 背景虚化
- Google工程师多图详解Android架构
- sql 随机函数newid()