基于UDP的网络通讯(socket)

1、 无连接编程(对等编程UDP)

     UDP编程流程

①  UDP套接字创建(socket)

②    地址与端口的绑定(bind)

③    数据收发       (sendto\recvfrom)

④    套接字关闭   (close)

CLIENT;

#include <iostream>
#include <windows.h>
using namespace std;

#pragma comment (lib,"ws2_32.lib")

void main()
{
	WORD wVersionRequested;
	WSADATA wsaData;
	int err;

	wVersionRequested = MAKEWORD( 2, 2 );

	err = WSAStartup( wVersionRequested, &wsaData );
	if ( err != 0 ) {
		/* Tell the user that we could not find a usable */
		/* WinSock DLL.                                  */
		return;
	}

	/* Confirm that the WinSock DLL supports 2.2.*/
	/* Note that if the DLL supports versions greater    */
	/* than 2.2 in addition to 2.2, it will still return */
	/* 2.2 in wVersion since that is the version we      */
	/* requested.                                        */

	if ( LOBYTE( wsaData.wVersion ) != 2 ||
        HIBYTE( wsaData.wVersion ) != 2 ) {
		/* Tell the user that we could not find a usable */
		/* WinSock DLL.                                  */
		WSACleanup( );
		return;
	}

	/* The WinSock DLL is acceptable. Proceed. */

	SOCKET sockCli;
	sockCli = socket(AF_INET,SOCK_DGRAM,0);

	SOCKADDR_IN addrSer,addrCli;
	addrCli.sin_family = AF_INET;
	addrCli.sin_port = htons(5050);
	addrCli.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");

	char sendBuf[256];
	char recvBuf[256];
	int len = sizeof(SOCKADDR);
	while(1)
	{
		cout<<"Cli :> ";
		cin>>sendBuf;
		sendto(sockCli,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)&addrCli,sizeof(SOCKADDR));
		recvfrom(sockCli,recvBuf,256,0,(SOCKADDR*)&addrCli,&len);
		cout<<"Ser :> "<<recvBuf<<endl;

	}
	closesocket(sockCli);
	WSACleanup();
}

SERVER:

#include <iostream>
#include <windows.h>
using namespace std;

#pragma comment (lib,"ws2_32.lib")

void main()
{
	WORD wVersionRequested;
	WSADATA wsaData;
	int err;

	wVersionRequested = MAKEWORD( 2, 2 );

	err = WSAStartup( wVersionRequested, &wsaData );
	if ( err != 0 ) {
		/* Tell the user that we could not find a usable */
		/* WinSock DLL.                                  */
		return;
	}

	/* Confirm that the WinSock DLL supports 2.2.*/
	/* Note that if the DLL supports versions greater    */
	/* than 2.2 in addition to 2.2, it will still return */
	/* 2.2 in wVersion since that is the version we      */
	/* requested.                                        */

	if ( LOBYTE( wsaData.wVersion ) != 2 ||
        HIBYTE( wsaData.wVersion ) != 2 ) {
		/* Tell the user that we could not find a usable */
		/* WinSock DLL.                                  */
		WSACleanup( );
		return;
	}

	/* The WinSock DLL is acceptable. Proceed. */

	SOCKET sockSer;
	sockSer = socket(AF_INET,SOCK_DGRAM,0);

	SOCKADDR_IN addrSer,addrCli;
	addrSer.sin_family = AF_INET;
	addrSer.sin_port = htons(5050);
	addrSer.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
	bind(sockSer,(SOCKADDR*)&addrSer,sizeof(SOCKADDR));

	char sendBuf[256];
	char recvBuf[256];
	int len = sizeof(SOCKADDR);
	while(1)
	{
		recvfrom(sockSer,recvBuf,256,0,(SOCKADDR*)&addrCli,&len);
		cout<<"Cli :> "<<recvBuf<<endl;
		cout<<"Ser :> ";
		cin>>sendBuf;
		sendto(sockSer,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)&addrCli,sizeof(SOCKADDR));
	}
	closesocket(sockSer);
	WSACleanup();
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-07-28 16:15:01

基于UDP的网络通讯(socket)的相关文章

Java学习总结(十三)——基于UDP协议网络编程

一.UDP网络编程1.面向无连接的数据传输,不可靠的,但效率高(音频,视频等).2.UDP一次发送的数据不能超过64kb.3.UDP编程所需要的类(1)DatagramSocket此类表示用来发送和接收数据报包的套接字(2)DatagramPacket此类表示数据报包方法:DatagramPacket(byte[]?buf, int?length, InetAddress?address, int?port)参数表示:buf - 包数据length - 包长度address - 目的地址port

Qt基于UDP的网络广播

UDP(用户数据报协议 User Data Protocol) 轻量级.不可靠.面向数据报.无连接  的协议. 适用情况: 网络数据大多为短消息: 拥有大量客户端: 对数据安全无特殊要求: 网络负担非常重,但对响应速度要求高. 工作原理: UDP客户端与服务器之间通过一定长度报文相互请求和响应: 报文大小的限制与各系统的协议实现有关,但不得超过其下层IP协议规定的64KB: 如果服务器未收到请求,客户端不会重发,所以是不可靠的. 工具: 使用Qt提供的网络模块QtNetwork: 使用Qt提供的

网络通讯Socket

网络 在物理网络的基础上,建立抽象的连接 win + r, 输入 cmd 输入命令: ipconfig 如果ping不通,要关闭防火墙 开始---搜索防火墙 Socket 通信 Socket - 插头 Socket - 网络套接字 通过 ip 地址,两台主机可以互相找到对象 在两台主机上,各选择一个端口号 端口是独占的,0到1024是一些常见服务的默认端口---http 80--https 443--ftp 21...5万以后,是系统保留端口用,来自动分配 我们选择端口要选择 1024到5万之间

基于UDP的网络编程

与TCP编程相比较,UDP缺少了connect().listen()及accept()函数,这是由于UDP协议无连接的特性,不用维护TCP的连接.断开等状态. UDP编程框图

基于 UDP 协议的网络编程

类 DatagramSocket 和 DatagramPacket 实现了基于 UDP 协议网络程序 UDP 数据报通过数据报套接字 DatagramSocket 发送和接收,系统不保证 UDP 数据报一定能够安全送到目的地,也不能确定什么时候可以抵达 DatagramPacket 对象封装了 UDP 数据报(<64k),在数据报中包含了发送端的 IP 地址和端口号以及接收端的 IP 地址和端口号 UDP 协议中每个数据报都给出了完整的地址信息,因此无须建立发送方和接收方的连接 举例: publ

Java中基于UDP协议的的网络编程(基础篇)

---恢复内容开始--- 一:什么是网络编程? 通俗的来说, 网络编程就是编写程序,让联网的两个或多个设备(例如计算机)之间进行数据传输.Java语言也支持网络编程,JDK提供的 java.net包提供了很多于网络编程相关的类,来支持网络编程方面的学习. 二:java网络编程所使用的协议? 有了计算机网络的基础,我们不难理解,在java中,网络编程是基于网络传输协议的. java网络编程,可以是基于TCP协议的,也可以基于UDP协议的.那么首先我们得知道tcp协议和udp两种协议的区别. 区别:

网络编程——基于TCP协议的Socket编程,基于UDP协议的Socket编程

Socket编程 目前较为流行的网络编程模型是客户机/服务器通信模式 客户进程向服务器进程发出要求某种服务的请求,服务器进程响应该请求.如图所示,通常,一个服务器进程会同时为多个客户端进程服务,图中服务器进程B1同时为客户进程A1.A2和B2提供服务. Socket概述 ①   所谓Socket通常也称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过“套接字”向网络发出请求或者应答网络请求. ②   Socket是连接运行在网络上的两个程序间的双向通信的端点. ③  

项目日志之基于Java socket的网络通讯

Java API网络类包中的Socket类是网络上运行的两个程序间双向通信的一端,它既可以接受请求,也可以发送请求,利用它可以较为方便的编写网络上数据的传递.我们打算通过Java中基于Socket的网络编程实现一个简单的网络通信程序.这就是我们团队项目(开发一款简单的通讯软件,其基本功能是实现一对一的网络信息通讯,并努力向一对多和多对多靠近)的主要内容. 一.Java socket通信开发原理(查阅资料): 服务器使用ServerSocket监听指定的端口,端口可以随意指定(由于1024以下的端

基于UDP的Socket网络编程实现用户登录的实现

package Test_UDP_Socket; import java.net.DatagramPacket.* //服务器端 import java.net.DatagramSocket; import java.net.InetAddress; public class ServerUDP { public static void main(String[] args) throws Exception{ //1.先实现接收Client信息 DatagramSocket socketSer