i3geek.com
闫庚哲的个人博客

C# 的socket通信

服务器端:

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

namespace port
{
    class Program
    {
        [STAThread]
        static void Main(string[] args)
        {
            //
            // TODO: 在此处添加代码以启动应用程序
            //
            int recv;//用于表示客户端发送的信息长度
            byte[] data = new byte[1024];//用于缓存客户端所发送的信息,通过socket传递的信息必须为字节数组
            IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 9050);//本机预使用的IP和端口
            Socket newsock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            newsock.Bind(ipep);//绑定
            newsock.Listen(10);//监听
            Console.WriteLine("waiting for a client");
            Socket client = newsock.Accept();//当有可用的客户端连接尝试时执行,并返回一个新的socket,用于与客户端之间的通信
            IPEndPoint clientip = (IPEndPoint)client.RemoteEndPoint;
            Console.WriteLine("connect with client:" + clientip.Address + " at port:" + clientip.Port);
            string welcome = "welcome here!";
            data = Encoding.ASCII.GetBytes(welcome);
            client.Send(data, data.Length, SocketFlags.None);//发送信息
            while (true)
            {//用死循环来不断的从客户端获取信息
                data = new byte[1024];
                recv = client.Receive(data);
                Console.WriteLine("recv=" + recv);
                if (recv == 0)//当信息长度为0,说明客户端连接断开
                    break;
                Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv));
                client.Send(data, recv, SocketFlags.None);
            }
            Console.WriteLine("Disconnected from" + clientip.Address);
            client.Close();
            newsock.Close();

        }

    }
}

客户端:

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

namespace port
{
    class Program
    {
        [STAThread]
        static void Main(string[] args)
        {
            //
            // TODO: 在此处添加代码以启动应用程序
            //
            byte[] data = new byte[1024];
            Socket newclient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            Console.Write("please input the server ip:");
            string ipadd = Console.ReadLine();
            Console.WriteLine();
            Console.Write("please input the server port:");
            int port = Convert.ToInt32(Console.ReadLine());
            IPEndPoint ie = new IPEndPoint(IPAddress.Parse(ipadd), port);//服务器的IP和端口
            try
            {
                //因为客户端只是用来向特定的服务器发送信息,所以不需要绑定本机的IP和端口。不需要监听。
                newclient.Connect(ie);
            }
            catch (SocketException e)
            {
                Console.WriteLine("unable to connect to server");
                Console.WriteLine(e.ToString());
                return;
            }
            int recv = newclient.Receive(data);
            string stringdata = Encoding.ASCII.GetString(data, 0, recv);
            Console.WriteLine(stringdata);
            while (true)
            {
                string input = Console.ReadLine();
                if (input == "exit")
                    break;
                newclient.Send(Encoding.ASCII.GetBytes(input));
                data = new byte[1024];
                recv = newclient.Receive(data);
                stringdata = Encoding.ASCII.GetString(data, 0, recv);
                Console.WriteLine(stringdata);
            }
            Console.WriteLine("disconnect from sercer");
            newclient.Shutdown(SocketShutdown.Both);
            newclient.Close();

        }

    }
}

 

赞(0)
未经允许不得转载:爱上极客 » C# 的socket通信
分享到: 更多 (0)

评论 10

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

    😛 赞个

    名人婚纱摄影6年前 (2014-01-05)回复
  2. #2

    顶一下!

    yan6年前 (2014-01-05)回复
    • 😛

      yan6年前 (2014-01-05)回复
      • 😛 👿

        yan6年前 (2014-01-05)回复
  3. #3

    支持!

    爱上极客6年前 (2014-01-05)回复
  4. #4

    表示留言支持

    博客网址之家6年前 (2014-01-06)回复
    • 谢谢~嘿嘿

      yan6年前 (2014-01-07)回复
  5. #5

    online for sale C# 的socket通信 – 爱上极客

    juventus soccer jerseys3年前 (2016-10-31)回复
  6. #6

    online for sale C# 的socket通信 – 爱上极客

    yankees jerseys cheap3年前 (2016-11-05)回复
  7. #7

    Socket client = newsock.Accept();
    在这里加个死循环 不论性能来说的话 直接开线程来做处理,这样既能保证数据的完整性 不会粘包 也可以 简单的开发
    如果在意性能的程序来说就可能需要做池了

    冰红茶2年前 (2017-05-25)回复