TCP Server&Client socket实现(Ubuntu16.04)

2023-05-16

TCP Server&Client socket实现(Ubuntu16.04)

  • 1 测试:
  • 2 TCP Server
  • 3 TCP Client

1 测试:

在这里插入图片描述

2 TCP Server

#include <iostream>
#include <sys/socket.h>
#include <netinet/in.h>//struct
#include <unistd.h>//close head
#include <string.h>//bzero
#define PORT 8111
#define MESSAGE_SIZE 1024
int main(int argc, char* argv[])
{
	int socket_fd;
	int accept_fd;
	int backlog = 10;
	int ret = -1;
	int flag = 1;
	struct sockaddr_in local_addr, remote_addr;
	char in_buf[MESSAGE_SIZE] = {0,};
	
	//create socket
	socket_fd = socket(AF_INET, SOCK_STREAM, 0);
	if (socket_fd == -1)
	{
		std::cout << "file to create socket!" << std::endl;
		exit(-1);
	}
	//set socket options
	ret = setsockopt(socket_fd, 
					SOL_SOCKET, 
					SO_REUSEADDR, 
					&flag, 
					sizeof(flag));
	if (ret == -1)
	{
		std::cout << "failed to set socket options!" << std::endl;
	}
	//set localaddr
	local_addr.sin_family = AF_INET;
	local_addr.sin_port = PORT;
	local_addr.sin_addr.s_addr = INADDR_ANY;//0 RENHE IP DOU LISTEN
	bzero(&(local_addr.sin_zero),8);
	//bind socket
	ret = bind(socket_fd, (struct sockaddr *)&local_addr, sizeof(struct sockaddr));
	if (ret == -1)
	{
		std::cout << "failed to bind addr!" << std::endl;
		exit(-1);
	}
	//listen
	ret = listen(socket_fd, backlog);
	if (ret == -1)
	{
		std::cout << "failed to listen socket!" << std::endl;
		exit(-1);
	}
	for(;;)
	{
		socklen_t addr_len = sizeof(struct sockaddr);
		accept_fd  = accept(socket_fd, 
							(struct sockaddr *) &remote_addr, 
							&addr_len);
		for (;;)
		{
			ret = recv(accept_fd, (void *)in_buf, MESSAGE_SIZE, 0);
			if (ret == 0)
				break;
			std::cout << "receive: " << in_buf << std::endl;
		
			send(accept_fd, (void*)in_buf, MESSAGE_SIZE,0);
		}
		close(accept_fd);
	}
	close(socket_fd);
	return 0;
}

3 TCP Client

#include <iostream>
#include <sys/socket.h>//1connect
#include <sys/types.h>//2connect
#include <netinet/in.h> //struct
#include <string.h>//memset
#include <stdio.h>//gets
#include <unistd.h>//close
#include <arpa/inet.h>//inet
#define PORT 8111
#define MESSAGE_LEN 1024
using namespace std;
int main(int argc, char* argv[])
{
	int socket_fd;
	int ret = -1;
	char sendbuf[MESSAGE_LEN] = {0,};
	char recvbuf[MESSAGE_LEN] = {0,};
	struct sockaddr_in serverAddr;
	socket_fd = socket(AF_INET, SOCK_STREAM, 0);
	if (socket_fd < 0)
	{
		cout << "failed to create socket" << endl;
		exit(-1);
	}
	
	serverAddr.sin_family = AF_INET;
	serverAddr.sin_port = PORT;
	serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
	ret = connect(socket_fd, 
				(struct sockaddr *)&serverAddr, 
				sizeof(struct sockaddr));
	if (ret < 0)
	{
		cout << "failed to connect!" << endl;
		exit(-1);
	}
	while(1)
	{
		memset(sendbuf, 0, MESSAGE_LEN);
		gets(sendbuf);
		ret = send(socket_fd, sendbuf, strlen(sendbuf), 0);
		if (ret <= 0)
		{
			cout << "failed to send data!" << endl;
			break;		
		}
		//guanbi 1 kill -9 1111      2 duibi
		if (strcmp(sendbuf, "quit") == 0)
		{
			break;
		}
		ret = recv(socket_fd, recvbuf, MESSAGE_LEN, 0);
		recvbuf[ret] = '\0';
		cout << "recv:" << recvbuf << endl;
	}
	close(socket_fd);
	
	
	return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TCP Server&Client socket实现(Ubuntu16.04) 的相关文章

  • 套接字编程Python:如何确保收到完整消息?

    我正在使用 python 3 x 和套接字模块 服务器在 ipv4 地址上运行并使用 tcp 我阅读了一些有关如何发送和接收数据的教程 对于服务器或客户端 要确保发送整个消息 您可以简单地检查发送的数据量是否等于消息的大小 def myse
  • Linux Socket write() 的错误文件描述符 错误的文件描述符 C

    我对 write 2 函数有一个有趣的问题 PrepareResponseForSetCoordinates 函数会导致写入时出现错误的文件描述符错误 这是错误行 perror 写入套接字时出错 总产量 写入套接字时出错 文件描述符错误 我
  • TCP 代理:在后端不可用时保持连接

    在 Docker 设置的上下文中 我想使用类似大使的模式来允许某些容器 例如数据库服务器 正常重新启动 而不必重新启动所有依赖的容器 例如 Web 服务器 并且没有错误消息 因为 数据库服务器不可用 因此 我想知道 是否有一个 TCP 代理
  • Node.js 找不到模块“tcp”

    节点在以下行崩溃 var tcp require tcp 错误文本 node js 201 throw e process nextTick error or error event on first tick Error Cannot f
  • Node.js SOAP 客户端参数格式

    我在使用 Node js 的 Node soap 模块作为客户端将某个特定的 Soap 参数正确格式化为第 3 方 SOAP 服务时遇到问题 此方法的 client describe 表示此特定输入应采用以下形式 params param
  • tcp_max_syn_backlog 和 somaxconn 有什么区别?

    我一直在阅读一些关于 Linux 上的 TCP 实现的文章 我很困惑 它们之间有什么区别net ipv4 tcp max syn backlog and net core somaxconn和backlog作为参数传递给listen 系统调
  • TCP 兼容性:为什么 TCP 不兼容数据包广播和组播操作?

    http en wikipedia org wiki User Datagram Protocol http en wikipedia org wiki User Datagram Protocol 与 TCP 不同 UDP 与数据包广播
  • Android TCP 连接最佳实践

    我正在开发一个需要 TCP 连接到 TCP 服务器的 Android 应用程序 用 Node js 编写 我的 Android TCP 客户端正在工作 可以来回发送消息 我的具体问题是 在 Android 中处理与服务器的 TCP 连接的最
  • 使用 iPhone 作为热点时 TCP 连接无法正常工作

    我正在开发一个 iOS 应用程序 它通过 TCP 套接字连接到在 Android 上运行的服务器应用程序 为了找到第二个设备的 IP 我使用 UDP 请求并接收服务器的 IP 当我将它们连接到 Wi Fi 网络或使用 Android 设备作
  • 在 Perl 中如何接受多个 TCP 连接?

    我对 Linux 的 Perl 脚本有疑问 它的主要目的是成为 3 个应用程序之间的中间人 它应该做什么 它应该能够等待 UDP 文本 不带空格 udp port 当它收到 UDP 文本时 它应该将其转发到连接的 TCP 客户端 问题是我的
  • PHP 上的多个 TCP 套接字请求

    是否可以使用 PHP 上的套接字服务器接受多个请求 并行 如果可以的话 怎样做 普通的 PHP 脚本无法接收多个请求 但如果你真的计划创建一个套接字服务器 作为 cmdline php 脚本启动 那么是的 这是可能的 调查http pear
  • Linux环境下串口数据转换为TCP/IP

    我需要从Linux系统的串口获取数据并将其转换为TCP IP发送到服务器 这很难做到吗 我有一些基本的编程经验 但对 Linux 的经验不多 有没有开源应用程序可以做到这一点 在 Linux 中您不需要编写程序来执行此操作 只是pipe h
  • 如何在Windows平台上编写Git Server Hooks?

    我找不到任何适用于 Windows 的 Git 挂钩的明确示例 我在 Windows Server 上使用 Bonobo Git Server 我需要预提交和提交后挂钩作为 cmd 或 bat 预提交应检查空注释 提交后应发送有关提交的电子
  • 无法推送到远程 GIT 存储库 - “[...] 似乎不是 git 存储库”

    我已经在我的服务器上使用适当文件夹中的以下内容设置了 GIT 存储库 我的子域的根目录 git mydomain com mkdir foo git cd foo git git init bare shared 这将使存储库可通过 URL
  • 当 URL 可在浏览器中访问时,SSH Curl 不起作用

    This post is linked with another post of mine still unsolved Laravel 作曲家更新 连接被拒绝 https stackoverflow com questions 52404
  • PHP 扩展 mysqli 和 nd_mysqli 之间的区别[重复]

    这个问题在这里已经有答案了 Mysqli 准备好的语句 如下所示 在以下情况下会抛出以下错误 get result 叫做 stmt connection gt prepare select column from table where i
  • 无法在服务器端 NodeJS 启用 CORS

    我无法启用CORS在服务器端 我的前端和后端服务器有不同的端口 服务器端的实现方式如下 http createServer function req res Here you can create your data response in
  • jinja2.exceptions.TemplateNotFound:index.html

    我尝试使用 Flask 打开 index html run py from app import app app run debug True init py from flask import Flask app Flask name f
  • 视频流上的 TCP 与 UDP

    我刚从网络编程考试回来 他们问我们的问题之一是 如果您要传输视频 您会使用 TCP 还是 UDP 请解释一下存储视频和实时视频流 对于这个问题 他们只是希望得到一个简短的答案 TCP 用于存储视频 UDP 用于实时视频 但我在回家的路上想到
  • 我应该害怕使用 UDP 进行客户端/服务器广播通话吗?

    我在过去的两天里阅读了每一篇StackOverflow问题和答案 以及googling当然 关于印地TCP and UDP协议 以便决定在我的用户应用程序和 Windows 服务之间的通信方法中应该使用哪一种 从我目前所看到的来看 UDP是

随机推荐

  • 【ROS入门学习02|创建工作空间】

    创建一个工作空间是进行ROS项目实践的第一步 主要根据古月居视频教程整理出来的干货 本人是干货爱好者 前言 很多初级教程会提供给我们一整个功能包或者工作空间的文件夹 xff0c 我们只需要去了解和运行即可 但是在学习初期 xff0c 还是要
  • winsocket tcp 非阻塞实例

    在 Winsocket 一 xff1a 单线程阻塞server amp client程序 xff08 tcp xff09 和 Winsocket 二 xff1a 多线程阻塞服务器程序 xff08 tcp xff09 介绍了阻塞tcp程序 x
  • linux C :char* ,char[], string类型

    1 xff0c char 表示指向字符串的指针 xff0c 如char str 61 34 hello 34 2 xff0c char 表示字符数组 如char str 61 34 world 34 3 xff0c string xff1a
  • AMP:参考xapp-1078和xapp1079的一些建议

    Linux系统默认是SMP模式 xff0c 有时我们也需要AMP模式进行开发 参考网站 xff1a wiki xilinx com 有xapp1078 xapp1079最新版本的AMP demo www arm com 主要是介绍arm系列
  • tcpdump抓包分析TCP三次握手过程

    转 xff1a http hi baidu com xxjjyy2008 blog item e6566bf837d91903d9f9fdd0 html 一 tcpdump使用 1 首先看下MAN手册 TCPDUMP 8 NAME tcpd
  • c语言结构体对齐

    C语言结构体对齐也是老生常谈的话题了 基本上是面试题的必考题 结构体到底怎样对齐 xff1f 下面总结了对齐原则 xff0c 在没有 pragma pack宏的情况下 xff1a 原则1 普通数据成员对齐规则 xff1a 第一个数据成员放在
  • 【C语言】关于printf的缓冲区问题

    前言 使用printf时 xff0c 发现要打印的东西并没有打印出来 xff0c 而是要等到下次printf n 或者程序退出时才会一起打印出来 代码示例 xff1a span class token macro property span
  • ubuntu 18.04+melodic版本ros安装问题

    ubuntu 18 04 43 melodic版本ros安装问题 1 问题Cannot locate rosdep definition for openslam gmapping 原因是在melodic 版本中还没有加入openslam
  • ros安装问题:source/opt/ros/kinetic/setup.bash: 没有那个文件或目录

    source opt ros kinetic setup bash 没有那个文件或目录 最近在学习中科院的ros系统教程 xff0c 在安装ros过程中 xff0c 使用 source bashrc 会出现问题 xff1a bash sou
  • 错误:Failed to contact master

    在ros运行时 xff0c 可能出现一下错误 xff1a ERROR registerPublisher Failed to contact master at localhost 11311 Retrying 原因很简单 xff0c 忘记
  • 将两个字符串连接起来,不要用strcat函数。

    3 将两个字符串连接起来 xff0c 不要用strcat函数 include lt stdio h gt int main char str1 80 str2 40 int i 61 0 j 61 0 printf 34 please en
  • MSComm控件配置为奇偶校验的方式

    Put Settings T 9600 e 8 1 其中 xff1a e xff0c 表示even xff0c 偶校验 xff1b o xff0c 表示odd xff0c 奇校验 xff1b n xff0c 表示无奇偶校验
  • [转]C++头文件包含顺序问题

    C 43 43 中类的声明和类的定义分开几乎成了一个不成文的规定 这样做的好处是使得类的声明和实现分开 xff0c 清晰明了 xff0c 同时便于库函数发布 但是在实际编程中由此也常常引起了一些由于头文件的包含顺序问题而产生的符号未定义的编
  • ubuntu6-ubuntu采用tomcat搭建http下载服务器

    一 下载 1 1 tomcat官网 Apache Tomcat Welcome 1 2 ubuntu下载tomcat cd tmp sudo wget https dlcdn apache org tomcat tomcat 10 v10
  • 最新哔哩哔哩视频弹幕播放器源码+带后台/亲测无错误

    正文 最新哔哩哔哩视频弹幕播放器源码 43 带后台 亲测无错误 xff0c 此款播放器源码添加及修复了很多功能 xff0c 且所有源码均本地化 xff0c 不存在外链的情况 xff0c 测试环境 xff1a PHP7 0 43 MySQL5
  • UDP的socket绑定到IP地址后无法接受广播数据

    UDP的socket绑定到IP地址后无法接受广播数据 fannyth 05 11 10 18 37 由于考虑到我的程序要在多网卡的机器上运行 所以我将网卡的ip地址绑定到了socket server addr sin addr s addr
  • (四)可视化IMU数据

    一 xff29 xff2d xff35 数据格式 从KITTI的readme文件中https github com yanii kitti pcl blob master KITTI README TXT可以看到IMU里数据的格式 KITT
  • ROS项目开发实战(一)——STM32与ROS串口通信

    序 本文主要发布一些作者从零开始开发ROS的项目实战经验 xff0c 包括一些经验与本文遇到坑时的解决方案 xff0c ROS因为版本不同与开发环境不同在实际开发中会遇到各类问题 xff0c 下面就细细道来 一 环境搭建 本人开发环境 上位
  • I2C驱动体系结构一:驱动软件概念与对应硬件的关系

    一 概念 xff1a 1 设备 xff1a struct device xff1a 该数据结构是对物理设备的软件抽象 xff0c 比如I2C slave xff08 对应i2c client xff09 和I2C 适配器 xff08 对应i
  • TCP Server&Client socket实现(Ubuntu16.04)

    TCP Server amp Client socket实现 xff08 Ubuntu16 04 xff09 1 测试 xff1a 2 TCP Server3 TCP Client 1 测试 xff1a 2 TCP Server span