이 글에서는 주로 C# 기반 UDP 프로토콜의 동기화 구현 코드를 소개합니다. 편집자는 꽤 좋다고 생각하여 지금부터 공유하고 참고용으로 제공하겠습니다. 에디터를 따라가서 살펴보겠습니다.
1. 요약
C# 기반 UDP 프로토콜의 동기식 통신 요약입니다.
2. 실험 플랫폼
Visual Studio 2010
3. 실험 원리
UDP 전송 프로토콜과 TCP 전송 프로토콜의 차이점은 해당 문서에서 확인할 수 있으므로 여기서는 설명하지 않겠습니다.
4. 예시
4.1 UDP 구현을 위한 소켓
UDP는 무선이기 때문에 연결 프로토콜. 따라서 서버 애플리케이션이 UDP 패킷을 보내고 받으려면 다음 두 가지 작업을 수행해야 합니다.
(1) 소켓 객체를 생성합니다.
(2 ) 생성된 소켓 개체를 로컬 IPEndPoint에 바인딩합니다.
위 단계를 완료하면 생성된 소켓은 IPEndPoint에서 들어오는 UDP 데이터 패킷을 수신하거나 나가는 UDP 데이터 패킷을 네트워크의 다른 장치로 보낼 수 있습니다. UDP를 사용하여 통신하는 경우 연결이 필요하지 않습니다. 원격 호스트 간에 설정된 연결이 없기 때문에 UDP는 표준 Send() 및 Receiver()t 소켓 메서드를 사용할 수 없지만 SendTo() 및 ReceiverFrom()이라는 두 가지 다른 메서드를 사용합니다.
SendTo() 메소드는 전송할 데이터와 대상 시스템의 IPEndPoint를 지정합니다. 이 방법은 특정 애플리케이션에 따라 여러 가지 방법으로 사용될 수 있지만 최소한 패킷과 대상 시스템을 지정해야 합니다.
SendTo(byte[] data,EndPoint Remote)
ReceiveFrom() 메서드는 SendTo() 메서드와 유사하지만 EndPoint 개체 선언을 사용하는 방법이 다릅니다. ref 수정을 사용하면 전달되는 것은 EndPoint 개체가 아니지만 매개 변수는 EndPoint 개체에 전달됩니다.
UDP 애플리케이션은 엄밀한 의미에서 실제 서버와 클라이언트가 아니라 동등한 관계, 즉 1차 관계와 2차 관계가 없습니다. 단순화를 위해 다음 애플리케이션을 여전히 UDP 서버라고 합니다.
서버측 코드:
using System; using System.Collections.Generic; using System.Text; using System.Net; using System.Net.Sockets; namespace UDP { class Program { static void Main(string[] args) { int recv; byte[] data = new byte[1024]; //得到本机IP,设置TCP端口号 IPEndPoint ip = new IPEndPoint(IPAddress.Any, 8001); Socket newsock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); //绑定网络地址 newsock.Bind(ip); Console.WriteLine("This is a Server, host name is {0}", Dns.GetHostName()); //等待客户机连接 Console.WriteLine("Waiting for a client"); //得到客户机IP IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0); EndPoint Remote = (EndPoint)(sender); recv = newsock.ReceiveFrom(data, ref Remote); Console.WriteLine("Message received from {0}: ", Remote.ToString()); Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv)); //客户机连接成功后,发送信息 string welcome = "你好 ! "; //字符串与字节数组相互转换 data = Encoding.ASCII.GetBytes(welcome); //发送信息 newsock.SendTo(data, data.Length, SocketFlags.None, Remote); while (true) { data = new byte[1024]; //发送接收信息 recv = newsock.ReceiveFrom(data, ref Remote); Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv)); newsock.SendTo(data, recv, SocketFlags.None, Remote); } } } }
UDP 서버 프로그램이 들어오는 메시지를 받으려면 프로그램이 로컬 시스템에 지정된 UDP 포트에 바인딩되어 있어야 합니다. 이는 적절한 로컬 IP 주소와 적절한 UDP 포트 번호를 사용하여 IPEndPoint 개체를 생성함으로써 수행됩니다. 위 예제 프로그램의 UDP 서버는 포트 8001의 네트워크에서 들어오는 UDP 패킷을 수신할 수 있습니다.
UDP 클라이언트 프로그램은 서버 프로그램과 매우 유사합니다.
클라이언트는 지정된 UDP 포트에서 들어오는 데이터를 기다릴 필요가 없으므로 Bind() 메서드를 사용하지 않고 데이터 전송 시 시스템에서 임의로 지정한 UDP 포트를 사용합니다. 사용되며 동일한 포트가 반환된 메시지를 수신합니다. 제품을 개발할 때 서버와 클라이언트 프로그램이 동일한 포트 번호를 사용하도록 클라이언트에 UDP 포트 세트를 지정하십시오. UDP 클라이언트 프로그램은 먼저 IPEndPoint를 정의하고 UDP 서버는 이 IPEndPoint로 데이터 패킷을 보냅니다. 원격 장치에서 UDP 서버 프로그램을 실행하는 경우 IPEndPoint 정의에 적절한 IP 주소와 UDP 포트 번호 정보를 입력해야 합니다.
클라이언트 코드 :
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.Net.Sockets; namespace UDPClient { class Program { static void Main(string[] args) { byte[] data = new byte[1024]; string input, stringData; //构建TCP 服务器 Console.WriteLine("This is a Client, host name is {0}", Dns.GetHostName()); //设置服务IP,设置TCP端口号 IPEndPoint ip = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8001); //定义网络类型,数据连接类型和网络协议UDP Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); string welcome = "你好! "; data = Encoding.ASCII.GetBytes(welcome); server.SendTo(data, data.Length, SocketFlags.None, ip); IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0); EndPoint Remote = (EndPoint)sender; data = new byte[1024]; //对于不存在的IP地址,加入此行代码后,可以在指定时间内解除阻塞模式限制 int recv = server.ReceiveFrom(data, ref Remote); Console.WriteLine("Message received from {0}: ", Remote.ToString()); Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv)); while (true) { input = Console.ReadLine(); if (input == "exit") break; server.SendTo(Encoding.ASCII.GetBytes(input), Remote); data = new byte[1024]; recv = server.ReceiveFrom(data, ref Remote); stringData = Encoding.ASCII.GetString(data, 0, recv); Console.WriteLine(stringData); } Console.WriteLine("Stopping Client."); server.Close(); } } }
위 코드의 구현 로직은 해당 설정이 완료된 후 서버가 먼저 클라이언트에 정보를 보내고 클라이언트는 키보드를 통해 문자열을 보냅니다. , 서버가 수신한 후 루프와 같이 클라이언트로 전송됩니다.
4.2 UDPClient 클래스를 이용한 구현
서버측 코드:
using System; using System.Net; using System.Net.Sockets; using System.Text; public class Custom { // 设置IP,IPV6 private static readonly IPAddress GroupAddress = IPAddress.Parse("IP地址"); // 设置端口 private const int GroupPort = 11000; private static void StartListener() { bool done = false; UdpClient listener = new UdpClient(); IPEndPoint groupEP = new IPEndPoint(GroupAddress, GroupPort); try { //IPV6,组播 listener.JoinMulticastGroup(GroupAddress); listener.Connect(groupEP); while (!done) { Console.WriteLine("Waiting for broadcast"); byte[] bytes = listener.Receive(ref groupEP); Console.WriteLine("Received broadcast from {0} :\n {1}\n", groupEP.ToString(), Encoding.ASCII.GetString(bytes, 0, bytes.Length)); } listener.Close(); } catch (Exception e) { Console.WriteLine(e.ToString()); } } public static int Main(String[] args) { StartListener(); return 0; } }
클라이언트측 코드:
using System; using System.Net; using System.Net.Sockets; using System.Text; public class Client { private static IPAddress GroupAddress = IPAddress.Parse("IP地址"); private static int GroupPort = 11000; private static void Send(String message) { UdpClient sender = new UdpClient(); IPEndPoint groupEP = new IPEndPoint(GroupAddress, GroupPort); try { Console.WriteLine("Sending datagram : {0}", message); byte[] bytes = Encoding.ASCII.GetBytes(message); sender.Send(bytes, bytes.Length, groupEP); sender.Close(); } catch (Exception e) { Console.WriteLine(e.ToString()); } } public static int Main(String[] args) { Send(args[0]); return 0; } }
위 코드 설명 필요 예:
(1) 위 코드는 IPV6 주소 기반의 멀티캐스트 모드입니다. IPv4의 브로드캐스트는 네트워크 성능 저하 또는 브로드캐스트 폭풍을 일으킬 수 있습니다. IPv6에는 브로드캐스트라는 개념이 없으며, 멀티캐스트와 애니캐스트로 대체됩니다.
(2) IPV6 주소 표현 방법:
a) X:X:X:X:X:X:X:X (각 X는 16자리 16진수를 나타냄) , 아님 대소문자를 구분합니다.
b) 선행 0은 생략할 수 있습니다. 예를 들어 09C0은 9C0으로 쓸 수 있고, 0000은 0으로 쓸 수 있습니다.
c) 연속된 0이 있는 필드를 표현할 수 있습니다. by :: 대신 ::은 전체 주소에 한 번만 나타날 수 있습니다. 예를 들어 FF01:0:0:0:0:0:0:1은 FF01::1로 축약될 수 있습니다.
(3) 폼 형태인 경우에는 이 형식을 사용하는 것을 권장합니다. 그렇지 않으면 데이터 수신 시 크래시가 발생할 수 있습니다.
아아아아위 내용은 C#의 UDP 프로토콜 기반 동기 통신 샘플 코드에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

C#.NET 개발의 최신 개발 및 모범 사례에는 다음이 포함됩니다. 1. 비동기 프로그래밍은 응용 프로그램 응답 성을 향상시키고 Async 및 Await 키워드를 사용하여 비 차단 코드를 단순화합니다. 2. LINQ는 지연된 실행 및 표현 트리를 통해 데이터를 효율적으로 조작하는 강력한 쿼리 기능을 제공합니다. 3. 성능 최적화 제안에는 비동기 프로그래밍 사용, LINQ 쿼리 최적화, 합리적으로 메모리 관리, 코드 가독성 및 유지 보수 개선 및 단위 테스트 작성이 포함됩니다.

.NET을 사용하여 응용 프로그램을 구축하는 방법? .NET을 사용하여 응용 프로그램 빌드 응용 프로그램은 다음 단계를 통해 달성 할 수 있습니다. 1) C# 언어 및 크로스 플랫폼 개발 지원을 포함한 .NET의 기본 사항을 이해합니다. 2) .NET 생태계의 구성 요소 및 작동 원리와 같은 핵심 개념을 배우십시오. 3) 간단한 콘솔 애플리케이션에서 복잡한 WebApis 및 데이터베이스 운영에 이르기까지 기본 및 고급 사용을 마스터합니다. 4) 구성 및 데이터베이스 연결 문제와 같은 일반적인 오류 및 디버깅 기술에 익숙해야합니다. 5) 응용 프로그램 성능 최적화 및 비동기 프로그래밍 및 캐싱과 같은 모범 사례.

C#은 엔터프라이즈 레벨 애플리케이션, 게임 개발, 모바일 응용 프로그램 및 웹 개발에서 널리 사용됩니다. 1) 엔터프라이즈 레벨 애플리케이션에서 C#은 종종 asp.netcore가 webapi를 개발하는 데 사용됩니다. 2) 게임 개발에서 C#은 Unity 엔진과 결합되어 역할 제어 및 기타 기능을 실현합니다. 3) C#은 코드 유연성 및 응용 프로그램 성능을 향상시키기 위해 다형성 및 비동기 프로그래밍을 지원합니다.

C# 및 .NET은 웹, 데스크탑 및 모바일 개발에 적합합니다. 1) 웹 개발에서 ASP.NETCORE는 크로스 플랫폼 개발을 지원합니다. 2) 데스크탑 개발은 WPF 및 Winforms를 사용하여 다양한 요구에 적합합니다. 3) 모바일 개발은 Xamarin을 통한 크로스 플랫폼 응용 프로그램을 실현합니다.

C#.NET 생태계는 개발자가 응용 프로그램을 효율적으로 구축 할 수 있도록 풍부한 프레임 워크 및 라이브러리를 제공합니다. 1.asp.netCore는 고성능 웹 애플리케이션을 구축하는 데 사용되며 2.entityFrameworkCore는 데이터베이스 작업에 사용됩니다. 이러한 도구의 사용 및 모범 사례를 이해함으로써 개발자는 응용 프로그램의 품질과 성능을 향상시킬 수 있습니다.

C# .NET 앱을 Azure 또는 AWS에 배포하는 방법은 무엇입니까? 답은 Azureappservice와 Awelasticbeanstalk를 사용하는 것입니다. 1. Azure에서 Azureappservice 및 AzurePipelines를 사용하여 배포를 자동화하십시오. 2. AWS에서 Amazon Elasticbeanstalk 및 Awslambda를 사용하여 배포 및 서버리스 컴퓨팅을 구현하십시오.

C#과 .NET의 조합은 개발자에게 강력한 프로그래밍 환경을 제공합니다. 1) C#은 다형성 및 비동기 프로그래밍을 지원합니다. 2) .net은 크로스 플랫폼 기능과 동시 처리 메커니즘을 제공하여 데스크탑, 웹 및 모바일 애플리케이션 개발에 널리 사용됩니다.

.NETFramework는 소프트웨어 프레임 워크이며 C#은 프로그래밍 언어입니다. 1..netframework는 데스크탑, 웹 및 모바일 애플리케이션 개발을 지원하는 라이브러리 및 서비스를 제공합니다. 2.C#은 .NETFramework 용으로 설계되었으며 최신 프로그래밍 기능을 지원합니다. 3..NetFramework는 CLR을 통해 코드 실행을 관리하고 C# 코드는 IL로 컴파일되어 CLR에 의해 실행됩니다. 4. .NETFramework를 사용하여 응용 프로그램을 신속하게 개발하면 C#은 LINQ와 같은 고급 기능을 제공합니다. 5. 일반적인 오류에는 유형 변환 및 비동기 프로그래밍 교착 상태가 포함됩니다. 디버깅을 위해서는 VisualStudio 도구가 필요합니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

SublimeText3 영어 버전
권장 사항: Win 버전, 코드 프롬프트 지원!

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

DVWA
DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.
