tcp/ip 全双工会话(windows)

2024-06-21 20:38
文章标签 ip windows tcp 会话 全双工

本文主要是介绍tcp/ip 全双工会话(windows),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


1.服务器端

#include "stdafx.h"
#include <iostream>
using namespace std;
#include <WinSock2.h>
#pragma  comment(lib,"WS2_32.lib")
#define MAX_BUFFER 256   //对于收发的数据有限  有必要考虑封装数据收发函数
int _tmain(int argc, _TCHAR* argv[])
{
 WSADATA wsaData;
 WORD sockVersion = MAKEWORD(2,2);  //设置版本号
 if(::WSAStartup(sockVersion,&wsaData))  //初始化网络资源
  exit(0);
 SOCKET sock = ::socket(AF_INET, SOCK_STREAM, 0);
 if(sock == SOCKET_ERROR)
 {
  cout<<"Fail socket()."<<endl;
  return 0;
 }
sockaddr_in addr;
 addr.sin_family = AF_INET;
 addr.sin_port = htons(6000);
 addr.sin_addr.S_un.S_addr = INADDR_ANY;
if(::bind(sock,(SOCKADDR*)&addr, sizeof(addr)) == SOCKET_ERROR)  //绑定
 {
  cout<<"Failed bind()."<<endl;
  return 0;
 }
if(::listen(sock,5) == SOCKET_ERROR) //监听
 {
  cout<<"Failed listen()."<<endl;
  return 0;
 }
sockaddr_in clientAddr;
 SOCKET clientSock;
 int len = sizeof(clientAddr);
 char szTest[MAX_BUFFER]={0};
clientSock = ::accept(sock,(SOCKADDR*)&clientAddr,&len);  //接受
 if(clientSock == INVALID_SOCKET)
 {
  cout<<"Failed accept()!"<<endl;
  return 0;
 }
 else
 {
  cout<<"接受到一个连接:  "<<inet_ntoa(clientAddr.sin_addr)<<endl;
 }
while(true)
 {
  cout<<"请输入数据:   ";
  cin>>szTest;
  ::send(clientSock, szTest, strlen(szTest),0);
  char szBuf[256] = {0}; 
  int len = ::recv(clientSock, szBuf,256,0);
  if(len > 0)
  {
   szBuf[len] = 0;
   cout<<"客户端说:   "<<szBuf<<endl;
  }
  Sleep(100);
 }
::closesocket(clientSock);
 ::closesocket(sock);   //关闭套接字
 ::WSACleanup();   //释放网络资源
 getchar();
 return 0;
}

//WSAStartup socket accept bing listen 等函数详见帮助文档

客户端:
#include "stdafx.h"
#include <iostream>
using namespace std;
#include <WinSock2.h>
#pragma  comment(lib,"WS2_32.lib")
#define MAX_BUFFER 256
int _tmain(int argc, _TCHAR* argv[])
{
 WSADATA wsaData;
 WORD sockVersion = MAKEWORD(2,2);
 if(::WSAStartup(sockVersion,&wsaData))
  exit(0);
 SOCKET sock = ::socket(AF_INET, SOCK_STREAM, 0);
 if(sock == SOCKET_ERROR)
 {
  cout<<"Fail socket()."<<endl;
  return 0;
 }
sockaddr_in addr;
 addr.sin_family = AF_INET;
 addr.sin_port = htons(6000);
 addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
if(::connect(sock,(SOCKADDR*)&addr, sizeof(addr)) == -1)
 {
  cout<<"Failed connect()!"<<endl;
  return 0;
 }
 char szTest[MAX_BUFFER]={0};
 while(true)
 {
  char szBuf[256] = {0}; 
  int len = ::recv(sock, szBuf,256,0);
  if(len > 0)
  {
   szBuf[len] = 0;
   cout<<"服务器说:   "<<szBuf<<endl;
  }
  cout<<"请输入数据:   ";
  cin>>szTest;
  ::send(sock, szTest, strlen(szTest),0);
  Sleep(100);
 }
 
 ::closesocket(sock);
 ::WSACleanup();
 getchar();
 return 0;
}

由于:accept,recv,send等函数式阻塞式的,所指只能你一句,我一句那样通话

这篇关于tcp/ip 全双工会话(windows)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1082281

相关文章

windows系统下shutdown重启关机命令超详细教程

《windows系统下shutdown重启关机命令超详细教程》shutdown命令是一个强大的工具,允许你通过命令行快速完成关机、重启或注销操作,本文将为你详细解析shutdown命令的使用方法,并提... 目录一、shutdown 命令简介二、shutdown 命令的基本用法三、远程关机与重启四、实际应用

Windows自动化Python pyautogui RPA操作实现

《Windows自动化PythonpyautoguiRPA操作实现》本文详细介绍了使用Python的pyautogui库进行Windows自动化操作的实现方法,文中通过示例代码介绍的非常详细,对大... 目录依赖包睡眠:鼠标事件:杀死进程:获取所有窗口的名称:显示窗口:根据图片找元素:输入文字:打开应用:依

shell脚本快速检查192.168.1网段ip是否在用的方法

《shell脚本快速检查192.168.1网段ip是否在用的方法》该Shell脚本通过并发ping命令检查192.168.1网段中哪些IP地址正在使用,脚本定义了网络段、超时时间和并行扫描数量,并使用... 目录脚本:检查 192.168.1 网段 IP 是否在用脚本说明使用方法示例输出优化建议总结检查 1

Redis连接失败:客户端IP不在白名单中的问题分析与解决方案

《Redis连接失败:客户端IP不在白名单中的问题分析与解决方案》在现代分布式系统中,Redis作为一种高性能的内存数据库,被广泛应用于缓存、消息队列、会话存储等场景,然而,在实际使用过程中,我们可能... 目录一、问题背景二、错误分析1. 错误信息解读2. 根本原因三、解决方案1. 将客户端IP添加到Re

javafx 如何将项目打包为 Windows 的可执行文件exe

《javafx如何将项目打包为Windows的可执行文件exe》文章介绍了三种将JavaFX项目打包为.exe文件的方法:方法1使用jpackage(适用于JDK14及以上版本),方法2使用La... 目录方法 1:使用 jpackage(适用于 JDK 14 及更高版本)方法 2:使用 Launch4j(

SpringBoot实现基于URL和IP的访问频率限制

《SpringBoot实现基于URL和IP的访问频率限制》在现代Web应用中,接口被恶意刷新或暴力请求是一种常见的攻击手段,为了保护系统资源,需要对接口的访问频率进行限制,下面我们就来看看如何使用... 目录1. 引言2. 项目依赖3. 配置 Redis4. 创建拦截器5. 注册拦截器6. 创建控制器8.

Linux限制ip访问的解决方案

《Linux限制ip访问的解决方案》为了修复安全扫描中发现的漏洞,我们需要对某些服务设置访问限制,具体来说,就是要确保只有指定的内部IP地址能够访问这些服务,所以本文给大家介绍了Linux限制ip访问... 目录背景:解决方案:使用Firewalld防火墙规则验证方法深度了解防火墙逻辑应用场景与扩展背景:

windows端python版本管理工具pyenv-win安装使用

《windows端python版本管理工具pyenv-win安装使用》:本文主要介绍如何通过git方式下载和配置pyenv-win,包括下载、克隆仓库、配置环境变量等步骤,同时还详细介绍了如何使用... 目录pyenv-win 下载配置环境变量使用 pyenv-win 管理 python 版本一、安装 和

QT实现TCP客户端自动连接

《QT实现TCP客户端自动连接》这篇文章主要为大家详细介绍了QT中一个TCP客户端自动连接的测试模型,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录版本 1:没有取消按钮 测试效果测试代码版本 2:有取消按钮测试效果测试代码版本 1:没有取消按钮 测试效果缺陷:无法手动停

Python使用pysmb库访问Windows共享文件夹的详细教程

《Python使用pysmb库访问Windows共享文件夹的详细教程》本教程旨在帮助您使用pysmb库,通过SMB(ServerMessageBlock)协议,轻松连接到Windows共享文件夹,并列... 目录前置条件步骤一:导入必要的模块步骤二:配置连接参数步骤三:实例化SMB连接对象并尝试连接步骤四: