首页 > 其他分享 >实现TCP收发信息和UDP收发信息

实现TCP收发信息和UDP收发信息

时间:2024-09-04 20:55:42浏览次数:6  
标签:UDP int cin TCP 收发 oldfd sizeof sin buff

1.TCP通信

服务器端

#include <myhead.h>
#define SERPORT 6666
#define SERIP "192.168.0.136"
#define BACKLOG 5
int main(int argc, const char *argv[])
{
	int oldfd=socket(AF_INET,SOCK_STREAM,0);
	if(oldfd==-1)
	{
		perror("socket");
		return -1;
	}

	//绑定
	struct sockaddr_in sin={
		.sin_family=AF_INET,
		.sin_port=htons(SERPORT),
		.sin_addr.s_addr=inet_addr(SERIP)
	};

	if(bind(oldfd,(struct sockaddr *)&sin,sizeof(sin))==-1)
	{
		perror("bind");
		return -1;
	}

	//监听
	if(listen(oldfd,BACKLOG)==-1)
	{
		perror("listen");
		return -1;
	}
	//结束信息
	int newfd;
	struct sockaddr_in cin;
	socklen_t cinlen =sizeof(cin);

		newfd=accept(oldfd,(struct sockaddr *)&cin,&cinlen);
		if(newfd==-1)
		{
			perror("accept");
			return -1;
		}
		printf("%s:%d客户端发来连接请求\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port));
	char buff[1024];

	while(1)
	{
		memset(buff,0,sizeof(buff));
		int len=recv(newfd,buff,sizeof(buff),0);
		printf("收到的信息:%s\n",buff);
		memset(buff,0,sizeof(buff));


	}
	close(oldfd);
	close(newfd);

	return 0;
}

客户端:

#include <myhead.h>

#define SERPORT 6666
#define SERIP "192.168.0.136"

int main(int argc, const char *argv[])
{
	int oldfd=socket(AF_INET,SOCK_STREAM,0);
	if(oldfd==-1)
	{
		perror("socket");
		return -1;
	}

	struct sockaddr_in cin={
		.sin_family=AF_INET,
		.sin_port=htons(SERPORT),
		.sin_addr.s_addr=inet_addr(SERIP)
	};

	if(connect(oldfd,(struct sockaddr*)&cin,sizeof(cin))==-1)
	{
		perror("connect");
		return -1;
	}

	char buff[1024];
	while(1)
	{
		memset(buff,0,sizeof(buff));
        printf("客户端发信息:");
        fgets(buff,sizeof(buff),stdin);

        send(oldfd,buff,sizeof(buff),0);//阻塞发送
	}
	close(oldfd);
	return 0;
}

2.UDP服务器中,使用connect函数,实现唯一的客户端与服务器通话

服务器端

#include <myhead.h>

#define SERPORT 6666
#define SERIP "192.168.0.136"
int main(int argc, const char *argv[])
{
	int oldfd=socket(AF_INET,SOCK_DGRAM,0);
	if(oldfd==-1)
	{
		perror("socket");
		return -1;
	}

	//绑定
	struct sockaddr_in sin={
		.sin_family=AF_INET,
		.sin_port=htons(SERPORT),
		.sin_addr.s_addr=inet_addr(SERIP),
	};
	if(bind(oldfd,(struct sockaddr *)&sin,sizeof(sin))==-1)
	{
		perror("bind");
		return -1;
	}

	//收消息
	struct sockaddr_in cin;
    socklen_t cinlen = sizeof(cin);
	char buff[1024];
	while(1)
	{
		memset(buff,0,sizeof(buff));
		int len =recvfrom(oldfd,buff,sizeof(buff),0,(struct sockaddr *)&cin,&cinlen);
		if(len==0)
		{
			break;
		}
		if(strcmp(buff,"only\n")==0)
		{
			//sendto(oldfd,buff,sizeof(buff),0,(struct sockaddr *)&cin,sizeof(cin));
			if(connect(oldfd,(struct sockaddr*)&cin,sizeof(cin))==-1)
			{
				perror("connect");
				return -1;
			}
			printf("进入唯一通信\n");
		}
		printf("服务器接收到的信息:%s\n",buff);
		
	}
	return 0;
}

客户端

#include <myhead.h>

#define CLIPOTR 6666
#define CLIIP "192.168.0.136"
int main(int argc, const char *argv[])
{
	int oldfd=socket(AF_INET,SOCK_DGRAM,0);
	if(oldfd==-1)
	{
		perror("socket");
		return -1;
	}

	struct sockaddr_in cin={
		.sin_family=AF_INET,
		.sin_port=htons(CLIPOTR),
		.sin_addr.s_addr=inet_addr(CLIIP)
	};

	char buff[1024];
	while(1)
	{

		printf("客户端发送消息:");
		fgets(buff,sizeof(buff),stdin);
		sendto(oldfd,buff,sizeof(buff),0,(struct sockaddr *)&cin,sizeof(cin));
		printf("发送成功\n");

	}
	return 0;
}

标签:UDP,int,cin,TCP,收发,oldfd,sizeof,sin,buff
From: https://blog.csdn.net/m0_58572142/article/details/141871520

相关文章

  • 网络编程(TCP通信)
    【1】认识网络网络:多设备通信【2】IP地址1.基本概念IP地址是Internet中主机的标识Internet中的主机要与别的机器通信必须具有一个IP地址IP地址为32位(IPv4)或者128位(IPv6)NAT:公网转私网、私网转公网IPV4表示形式:常用点分十进制形式,如202.38.64.10,最后都会转换为一个32位的......
  • 使用Python模拟TCP/IP协议栈
    1.代码如下importrandomclassApplicationLayer:defsend_data(self,data):print(f"ApplicationLayer:Sendingdata:{data}")returndatadefreceive_data(self,data):print(f"ApplicationLayer:Receiveddata......
  • Linux之tcpdump
    参数详解参数含义-i指定tcpdump监听的网络接口eth0bond0等等-c指定要监听的数据包数量,达到指定数量后自动停止抓包-w指定将监听到的数据包写入文件中保存-A指定将每个监听到的数据包以ACSII可见字符打印-n指定将每个监听到数据包中的域名转换成IP......
  • 【网络原理】Udp 的报文结构,保姆式教学,快速入门
    本篇会加入个人的所谓鱼式疯言❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言而是理解过并总结出来通俗易懂的大白话,小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的.......
  • ModbusTCP 转 Profibus DP(M)网关,型号 SG-TCP-Profibus(M),详细介绍
    一、功能概述1.1设备简介本产品是ModbusTCP和DP(ProfibusDP)网关,使用数据映射方式工作。本产品在ModbusTCP侧作为ModbusTCP从站,接PLC、上位机、wincc屏等;在DP侧做为DP主站,接ProfibusDP设备,如编码器、流量计、显示屏等;通过增加DP/PA耦合器可接入Profi......
  • Linux网络抓包-tcpdump
    tcpdump-dumptrafficonanetworktcpdump是linux上一个强大的抓包工具。tcpdump常用抓包命令tcpdump-v-iany-s0-wtest.caphost192.168.0.1andport5001#-v:打印详细输出#-i:指定网卡,例如eth0,any代表所有网卡#-s:指定捕获的数据包的大小,0代表......
  • 镭速UDP测速集成动态库或者静态库测速篇
    1. 下载镭速UDP集成库首先下载镭速UDP集成压缩包,解压后能在解压目录找到三个依赖库RaySync.lib、RaySync-Multi-Proxy-Client-Plus.lib、RaySync-Proxy-Server-Lib.lib。三个依赖头文件TyphoonMultiSocks.h、TyphoonProduct.h、TyphoonServer.h。2. 代码集成接口函数调用顺序:1. ......
  • C# TcpClient bind,listen,accept,send receive
    //serverusingSystem;usingSystem.Net;usingSystem.Net.Sockets;usingSystem.Text;namespaceConsoleApp63{internalclassProgram{staticvoidMain(string[]args){intport=11000;TcpServerserver......
  • UDP-galacturonic acid,UDP-GalA,尿苷二磷酸半乳糖醛酸的介绍
    UDP-galacturonicacid,UDP-GalA,尿苷二磷酸半乳糖醛酸的介绍UDP-galacturonicacid(尿苷二磷酸半乳糖醛酸,简称UDP-GalA)在生物体内具有重要作用。一、UDP-GalA的功能在细胞壁合成中扮演关键角色。它是合成果胶等细胞壁成分的重要前体物质。果胶对于维持细胞壁的结构完整性和......
  • 如何利用 UDP-6-N3-GalNAc 来追踪和研究糖基化在细胞中的发生位置和过程?
    如何利用UDP-6-N3-GalNAc来追踪和研究糖基化在细胞中的发生位置和过程?UDP-6-N3-GalNAc是一种具有特定化学结构的分子。一、分子结构与组成它包含尿苷二磷酸(UDP)、N3(叠氮基团)和GalNAc(N-乙酰半乳糖胺)。其中,UDP作为一种重要的辅酶,在许多生物化学反应中起着传递能量和基团......