1. 程式人生 > >udpsocket 通信C#例子

udpsocket 通信C#例子

socket 通信 存在 sys string col system bind 數據連接 threading

服務端代碼:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;

namespace UdpsocketServer
{
    class Program
    {
        static void Main(string[] args)
        {
            int recv;
            
byte[] revData = new byte[1024]; byte[] sendData = new byte[1024]; IPEndPoint ip = new IPEndPoint(IPAddress.Any, 6666); Socket newsock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); newsock.Bind(ip); Console.WriteLine(
"我是服務端,主機名:{0}", Dns.GetHostName()); Console.WriteLine("等待客戶端連接....."); IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0); EndPoint Remote = (EndPoint)(sender); recv = newsock.ReceiveFrom(revData, ref Remote); Console.WriteLine("我是服務端,客戶端{0}連接成功
", Remote.ToString()); Console.WriteLine(Encoding.Unicode.GetString(revData, 0, recv)); string welcome = "你好,我是服務器"; sendData = Encoding.Unicode.GetBytes(welcome); newsock.SendTo(sendData, sendData.Length, SocketFlags.None, Remote); while (true) { sendData = new byte[1024]; recv = newsock.ReceiveFrom(sendData, ref Remote); string recvData = string.Format("客戶端{0}發送:{1}", Remote.ToString(), Encoding.Unicode.GetString(sendData, 0, recv)); Console.WriteLine(recvData); // string recvData =string.Format("服務器接收到數據{0}", Encoding.ASCII.GetString(data, 0, recv)); // byte.Parse(recvData); string recvDateSucceed = string.Format("服務器已收到."); sendData = Encoding.Unicode.GetBytes(recvDateSucceed); newsock.SendTo(sendData, sendData.Length, SocketFlags.None, Remote); } } } }

客戶端代碼:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;

namespace UdpsocketDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            byte[] data = new byte[1024];
            string input, stringData;
            //構建TCP 服務器
            Console.WriteLine("這是客戶端, 主機名是 {0}", Dns.GetHostName());
            //設置服務IP,設置TCP端口號
            IPEndPoint ip = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 6666);
            //定義網絡類型,數據連接類型和網絡協議UDP
            Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            string welcome = "你好服務器,我是客戶端! ";
            data = Encoding.Unicode.GetBytes(welcome);
            server.SendTo(data, data.Length, SocketFlags.None, ip);
            IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
            EndPoint Remote = (EndPoint)sender;

            byte[] sendData = new byte[1024];
            //對於不存在的IP地址,加入此行代碼後,可以在指定時間內解除阻塞模式限制
            int recv = server.ReceiveFrom(sendData, ref Remote);
            Console.WriteLine("我是客戶端,從服務器端: {0}接收到消息 ", Remote.ToString());
            Console.WriteLine(Encoding.Unicode.GetString(sendData, 0, recv));
            while (true)
            {
                input = Console.ReadLine();
                //退出
                if (input == "exit")
                    break;
                server.SendTo(Encoding.Unicode.GetBytes(input), Remote);
                byte[] recvData = new byte[1024];
                recv = server.ReceiveFrom(recvData, ref Remote);
                stringData = string.Format("服務器{0}發送:{1}", Remote.ToString(), Encoding.Unicode.GetString(recvData, 0, recv));
                Console.WriteLine(stringData);
            }
            Console.WriteLine("服務停止.");
            server.Close();

        }

    }
}

說明: 客戶端直接發送內容,服務器端直接接收

udpsocket 通信C#例子