C# socket通信TCP和UDP方式

这里写一篇文章来和大家请教一下,关于socket通信的方式

这里我也是通过网络的其他地方整理的代码,来实现自己的功能

但是我发现一个问题,就是如此采用UDP方式,必须先向服务端发送一个数据才能接受到来自服务器定时不断发出的数据。不知道怎么解决。小弟对UDP方式理解的不够深入,求大神指导呢

这里贴出源码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.IO;


namespace SocketHelp
{
    public delegate void ReadDataEvent(byte[] Bytes, int size);
    
    #region TCP协议


    #region ClientTCP
    public class ClientTCP
    {
        private Socket client;
        public byte[] oubytes;
        //public static PrintMsg _PrintMsg;
        public ReadDataEvent ReadData;
        public ClientTCP()
        {
            oubytes =new byte[1024];
        }
        public bool StartClient(string IP, int port)
        {
            try
            {
                client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                client.BeginConnect(IP, port, new AsyncCallback(ConnectTarget), client);
                // 接收输入并发消息  
                //bool send = false;
                //while (true)
                //{
                //    showMsg("ME: " + DateTimeOffset.Now.ToString("G"));
                //    send = SendMsg;
                //    inbytes = Encoding.UTF8.GetBytes(Msg);
                //    client.BeginSend(inbytes, 0, inbytes.Length, SocketFlags.None, new AsyncCallback(SendTarget), client);
                //}
                //client.Close();  
                return true;
            }
            catch (Exception ex)
            {
                Method.writeLog(ex.Message.ToString());
                return false;
            }
        }
        public bool SendData(byte[] Bytes)
        {
            try
            {
                client.BeginSend(Bytes, 0, Bytes.Length, SocketFlags.None, new AsyncCallback(SendTarget), client);
                return true;
            }
            catch (Exception ex)
            {
                Method.writeLog(ex.Message.ToString());
                return false;
            }
        }
        private void ConnectTarget(IAsyncResult res)
        {
            Method.writeLog("已建立连接");
            Socket sever = (Socket)res.AsyncState;
            sever.EndConnect(res);
            sever.BeginReceive(oubytes, 0, oubytes.Length, SocketFlags.None, ReceiveData, sever);
        }


        private void SendTarget(IAsyncResult res)
        {
            //Socket client = (Socket)res.AsyncState;
            //int size = client.EndSend(res);
        }


        private void ReceiveData(IAsyncResult res)
        {
            try
            {
                Socket sever = (Socket)res.AsyncState;
                int size = sever.EndReceive(res);
                if (ReadData != null)
                {
                    //解析数据
                    ReadData(oubytes, size);
                }
                // 继续等待输入  
                sever.BeginReceive(oubytes, 0, oubytes.Length, SocketFlags.None, new AsyncCallback(ReceiveData), sever);
            }
            catch (Exception ex)
        &nbs

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值