网络编程Tcp和UDP的入门学习

0 篇文章 0 订阅

//我们都知道游戏登录有客户端和服务器我们就拿这个举个例子吧
//服务器端
TcpListener listener = new TcpListener(8000);//8000是端口 ,自己定义
listener.Start();// 开始侦听传入的连接请求
while (true)//我们这是让服务器端一直运行
{
TcpClient client = listener.AcceptTcpClient();// 接受挂起的连接请求
Console.WriteLine(“有人连过来了”);
NetworkStream ns = client.GetStream();//得到流
StreamWriter sw = new StreamWriter(ns);
sw.WriteLine(“你和我已经连接上了 ,可以正常通信了”);
sw.Flush();
//博主是自己和自己连接的,所以我写了两个程序

       //客户端
        TcpClient client = new TcpClient("192.168.50.115", 8000);//“”里是服务器的Ip 端口也要一致
        NetworkStream ns = client.GetStream();//得到服务器流
        StreamReader sr = new StreamReader(ns);//读取
        string str = sr.ReadLine();//接收
        Console.WriteLine(str);//打印

***********还没跟新完哟 ,请慢慢等待
//运用 Socket实现网络连接
//创建实例
Socket socketClient = new Socket(SocketType.Stream, ProtocolType.Tcp);
IPAddress ip = IPAddress.Parse(“192.168.50.140”);
IPEndPoint point = new IPEndPoint(ip, 2333);
socketClient.Connect(point);
Thread thread = new Thread(Recive);
thread.Start(socketClient);
Thread sendThread = new Thread(SendThread);
sendThread.Start(socketClient);
}

    static void SendThread(object obj)
    {
        Socket socket = obj as Socket;
        while (true)
        {
            Console.WriteLine("老铁请说话:");
            string message = Console.ReadLine();
            byte[] buffter = Encoding.UTF8.GetBytes(message);
            int temp = socket.Send(buffter);
        }
    }
    /// <summary>
    /// 接收消息
    /// </summary>
    /// <param name="o"></param>
    static void Recive(object o)
    {
        Socket socket = o as Socket;
        while (true)
        {
            //获取发送过来的消息容器
            byte[] buffer = new byte[1024 * 1024 * 2];
            int effective = socket.Receive(buffer);
            string str = Encoding.UTF8.GetString(buffer, 0, effective);//把字节数组转换成字符串
            Console.WriteLine("收到服务器发来的贺电为:" + str);
            //var buffers = Encoding.UTF8.GetBytes("Server Return Message");
            //socket.Send(buffers);
        }
    }
}
  static void Main(string[] args)
    {

        Socket serverSocket = new Socket(SocketType.Stream, ProtocolType.Tcp);
        IPAddress ip = IPAddress.Any;//0.0.0.0 意思是可以监听任意的ip地址
        IPEndPoint point = new IPEndPoint(ip, 2333);
        //把要监听的地址绑定到此套接字上(socket)
        serverSocket.Bind(point);
        //设置同时可以连接客户端的个数
        serverSocket.Listen(10);
        //利用线程后台执行监听,否则程序会假死
        Thread thread = new Thread(Listen);
        thread.Start(serverSocket);

    }

    /// <summary>
    /// 监听连接
    /// </summary>
    /// <param name="o"></param>
    static void Listen(object o)
    {
        Socket serverSocket = o as Socket;
        while (true)
        {

            //时刻监听客户端向服务器发来的贺电,
            Socket socket = serverSocket.Accept();

            //?
            //获取链接的IP地址
            string socketIpoint = socket.RemoteEndPoint.ToString();
            Console.WriteLine("客户端链接成功,地址为:"+ socketIpoint);
            //开启一个新线程不停收、发消息
            Thread thread = new Thread(Recive);
            thread.Start(socket);
            Thread sendThread = new Thread(SendThread);
            sendThread.Start(socket);
        }
    }
    static void SendThread(object obj)
    {
        Socket socket = obj as Socket;
        while (true)
        {             
            Console.WriteLine("服务器请说话:");
            string message = Console.ReadLine();
            byte[] buffter = Encoding.UTF8.GetBytes(message);
            int temp = socket.Send(buffter);
        }
    }
    /// <summary>
    /// 接收消息
    /// </summary>
    /// <param name="o"></param>
    static void Recive(object o)
    {
        Socket socket = o as Socket;
        while (true)
        {
            //获取发送过来的消息容器
            byte[] buffer = new byte[1024 * 1024 * 2];
            int effective = socket.Receive(buffer);

            string str = Encoding.UTF8.GetString(buffer, 0, effective);
            Console.WriteLine("收到客户端发来的贺电为:"+str);
        }
    }
}
 /*

TCP与UDP的区别:
1.基于连接与无连接;
2.对系统资源的要求(TCP较多,UDP少);
3.UDP程序结构较简单;
4.流模式与数据报模式 ;
5.TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证。
*/

          **//发送端的地址**
        IPEndPoint udpPoint = new IPEndPoint(IPAddress.Parse("192.168.50.35"), 5500);
        //创建数据报对象
        UdpClient udpClient = new UdpClient(udpPoint);
        //发送的信物
        string sendMsg = "Hello UDP Server.";
        //把信物处理成字节数组
        byte[] sendData = Encoding.Default.GetBytes(sendMsg);
        //构造发给谁的 ip 对象
        IPEndPoint targetPoint = new IPEndPoint(IPAddress.Parse("192.168.50.35"), 5500);
        //发送数据报出去
        udpClient.Send(sendData, sendData.Length, targetPoint);
        Console.WriteLine("----------发送成功");



         static void Main(string[] args)
    {
        **//接受端的ip地址**
        IPEndPoint udpPoint = new IPEndPoint(IPAddress.Parse("192.168.50.56"), 5500);
        //初始化数据报对象
        UdpClient udpClient = new UdpClient(udpPoint);
        //初始化接受端的ip
        IPEndPoint senderPoint = new IPEndPoint(IPAddress.Any, 0);
        while (true)
        {
           // Console.WriteLine("去看看坑里有东西没");
            //接受数据
            byte[] recvData = udpClient.Receive(ref senderPoint);
            IPEndPoint IP = senderPoint;
            //处理接受到的数据
            Console.WriteLine(IP.Address + "Receive Message:{0}", Encoding.Default.GetString(recvData));
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值