C++,window,Socket通讯

下载Ws2_32.lib

链接下载Ws2_32.lib
百度网盘链接
提取码:wo9p

工程项目中CMakelists.txt编写:

project(cudp)
set(CMAKE_CXX_STANDARD 98)
add_executable(cudp main.cpp)
link_libraries(cudp D:\\data_save\\cudp\\Ws2_32.lib)

UDP协议:

  1. 将数据及其数据源和目的封装为数据包,不需要建立连接
  2. 每个数据包大小限制在 64KB中
  3. 无连接,不可靠,数据包会丢失,不可靠协议
  4. 效率高,速度快

TCP协议:

  1. 面向连接,有特定的数据传输通道(IO流)
  2. 在连接中传输大量数据
  3. 通过三次握手机制 建立连接 ,属于一种可靠协议
  4. 效率低
    在这里插入图片描述
    图解tcp,udp协议的博客链接:https://www.cnblogs.com/javastack/p/14887904.html

UDP的通讯过程

server端:
  1. open a socket(socket)
  2. name the socket(bind)
  3. send and receive data(sendto recvfrom)
  4. close socket(closesocket)
client端:
  1. open a socket(socket)
  2. send and receive data(sendto recvfrom)
  3. close socket(closesocket)

参考程序,博客:
https://www.jianshu.com/p/afb4237a5674

server端

void main()
{
	SOCKET socket1;
	InitWinsock();
	struct sockaddr_in local;
	struct sockaddr_in from;
	int fromlen =sizeof(from);
	local.sin_family=AF_INET;
	local.sin_port=htons(1000); ///监听端口
	local.sin_addr.s_addr=INADDR_ANY; ///本机

	socket1=socket(AF_INET,SOCK_DGRAM,0);
	bind(socket1,(struct sockaddr*)&local,sizeof local);
	while (1)
	{
		char buffer[1024]="/0";
		printf("waiting for message from others-------------/n");
		if (recvfrom(socket1,buffer,sizeof buffer,0,(struct 			sockaddr*)&from,&fromlen)!=SOCKET_ERROR)
		{
			printf("Received datagram from %s--%s/n",inet_ntoa(from.sin_addr),buffer);
//给cilent发信息
			sendto(socket1,buffer,sizeof buffer,0,(struct sockaddr*)&from,fromlen);

		}
		Sleep(500);
	}
	closesocket(socket1);
}

cilent端

void main()
{
 SOCKET socket1;

 InitWinsock();
 struct sockaddr_in server;
 int len =sizeof(server);
 server.sin_family=AF_INET;
 server.sin_port=htons(1000); ///server的监听端口
 server.sin_addr.s_addr=inet_addr("168.168.0.10"); ///server的地址

 socket1=socket(AF_INET,SOCK_DGRAM,0);
 while (1)
 {
  char buffer[1024]="/0";
  printf("input message/n");
  scanf("%s",buffer);
  if (strcmp(buffer,"bye")==0)
   break;
   if (sendto(socket1,buffer,sizeof buffer,0,(struct sockaddr*)&server,len)!=SOCKET_ERROR)
   {
    if (recvfrom(socket1,buffer,sizeof buffer,0,(struct sockaddr*)&server,&len) != SOCKET_ERROR)
     printf("rece from server:%s/n",buffer);
   }
 }
 closesocket(socket1);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值