tcp/socket通信 ,控制台版本

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

namespace scoketdemo4server
{
    class Program
    {

        public  static void listenclient(object i)
        {
            Console.WriteLine("lis started");
            var socketex = i as Socket; //? 检测类型是否正确
            while (true)
            {
                var server = socketex.Accept();
                var sendport = server.RemoteEndPoint.ToString();
                Console.WriteLine($"{sendport} connected");//为了改善string.Format使用的不方便才有了 $格式化
                //new thread for recving
                Thread thread0 = new Thread(recvmsg);
                thread0.IsBackground = true;
                thread0.Start(server);
                Console.WriteLine("start thread0:{0}", thread0.Name);

                Thread thread1 = new Thread(sendmsg);
                thread1.IsBackground = true;
                thread1.Start(server);
                Console.WriteLine("start thread1 {0}", thread1.Name);
            }
            
        }


        public static void recvmsg(object i)
        {
            var server = i as Socket;
            while (true)
            {
                try    //为什么无法捕获错误,SocketException,与System.Net.Sockets.SocketException不同
                {
                    //recv
                    byte[] buffer = new byte[1024];

                    var str = server.Receive(buffer);                    
                    if (str == 0)
                    {
                        break;
                    }
                    var str1 = Encoding.UTF8.GetString(buffer, 0, str);
                    

                    Console.WriteLine("recv from client {0}",str1);
                   
                }
                catch (System.Net.Sockets.SocketException ex)
                {
                    Console.WriteLine("rec error {0}",ex.Message);
                    
                    Console.ReadKey();
                    
                }


            }
        }



        public static void sendmsg(object o)
        {
            var server = o as Socket;
            while (true)
            {
                try
                {
                    Console.WriteLine("server plz input:");
                    var strinput = Console.ReadLine();
                    //var str = Encoding.Unicode.GetBytes(strinput);
                    var str = Encoding.UTF8.GetBytes(strinput);
                    server.Send(str);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                    Console.Read();
                }
            }
        }




        static void Main(string[] args)
        {
            Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            IPAddress ip = IPAddress.Any;
            IPEndPoint port = new IPEndPoint(ip,49091);
            //bind
            server.Bind(port);
            Console.WriteLine("listen success");
            server.Listen(4);

            //开启线程
            Thread thread = new Thread(listenclient);
            thread.IsBackground = false;
            thread.Start(server);
            //var s = $"{12}+{23}={12 + 23}";//  结果:12+23=35
            //Console.WriteLine(s);
        }

    }
}

客户端代码如下:

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

namespace socketdemo4client
{
    class Program
    {
        
        
        public static void recvmsg(object o)
        {
            var client = o as Socket;
            while (true)
            {
                try
                {
                    byte[] buffer1 = new byte[1024];
                    var recdata = client.Receive(buffer1);
                    if (recdata == 0)
                    {
                        break;
                    }
                    var str = Encoding.UTF8.GetString(buffer1, 0, recdata);
                    Console.WriteLine("recv from serve:{0}",str);
                }
                catch (Exception ex)
                {
                    Console.WriteLine("thread {0}",ex.Message);
                    Console.Read();
                }
            }
        }
        public static void sendmsg(object o)
        {
            var client = o as Socket;
            while (true)
            {
                try
                {
                    Console.WriteLine("plz input:");
                    var strinput = Console.ReadLine();
                    var str = Encoding.UTF8.GetBytes(strinput);
                    client.Send(str);
                }
                catch (System.Net.Sockets.SocketException ex)
                {
                    Console.WriteLine(ex.Message);
                    Console.Read();
                }
            }
        }




        static void Main(string[] args)
        {   try 
            {
                Socket client = new Socket(SocketType.Stream, ProtocolType.Tcp); //实例化客户端的socket
                //client.SendTimeout = 120;
                IPAddress ip = IPAddress.Parse("127.0.0.1");
                IPEndPoint port = new IPEndPoint(ip, 49091);
                //client.ReceiveTimeout = 100*2;
                client.Connect(port);
                

                Thread thread = new Thread(recvmsg);
                thread.IsBackground = false;
                thread.Start(client);

                Thread thread3 = new Thread(sendmsg);
                thread3.IsBackground = false;
                thread3.Start(client);
                Console.ReadKey();
               /* while (true)
                {
                    var buffer = Console.ReadLine();
                    var buff = Encoding.UTF8.GetBytes(buffer);
                    var temp = client.Send(buff);
                    Thread.Sleep(10);
                }*/ 
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.ReadKey();
            }
        }
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值