Socket通信简例

来源:互联网 发布:windows自带画图工具 编辑:程序博客网 时间:2024/05/16 01:01

今天实践了Socket通信,不过是简单的控制台示例,在此做个笔记,希望可以帮到一些人,也希望抛砖引玉,得到大神的指点~

先说说Server端

1 . 确定端口及主机IP;

2 . 利用IP初始化IPAddress类型的实例;

3 . 利用端口及IPAddress类型的实例初始化IPEndPoint类的实例;

4 . 新建Socket对象,绑定IPEndPoint类的实例;

5 . Socket开始监听;

6 . 接收到Client端链接,建立新的Socket;

7 . 接收Client端消息;

8 . 返回给Client端消息;

9 . 关闭Step 6中Socket;

10 . 关闭Step 4中Socket;

View code:

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

namespace SocketTestServer
{
    class Program
    {
        static void Main(string[] args)
        {
            //确定服务端端口及IP
            int port = 2000;
            string host = "127.0.0.1";

            //利用IP创建IPAddress类型的实例
            IPAddress ip = IPAddress.Parse(host);
            //利用端口及IPAddress类型的实例创建IPEndPoint类的实例
            IPEndPoint ipe = new IPEndPoint(ip, port);

            //创建Socket对象
            Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            //绑定IPEndPoint类的实例
            s.Bind(ipe);
            //Socket实例开始监听
            s.Listen(0);
            Console.WriteLine("Waiting Client connect Server!");

            //接收到Client连接,为此连接建立新的Socket
            Socket temp = s.Accept();//为新建连接创建新的socket
            Console.WriteLine("Client Connected!");

            while (true)
            {
                //接收Client端消息
                string recvStr = "";
                byte[] recvBytes = new byte[1024];
                int bytes;
                bytes = temp.Receive(recvBytes, recvBytes.Length, 0);
                recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes);
                Console.WriteLine("Server receive message : {0}", recvStr);

                //当接收到Client端“exit”消息,则返回给Client端“Exit”消息,并关闭Server端Socket
                if (recvStr.Equals("exit"))
                {
                    Console.WriteLine("Client request close connect!");
                    string sendExitStr = "Exit";
                    byte[] bs_exit = Encoding.ASCII.GetBytes(sendExitStr);
                    temp.Send(bs_exit, bs_exit.Length, 0);

                    goto End;
                }

                //输入文字,返回给client端
                Console.WriteLine("Input your message send to client!");
                string sendStr = Console.ReadLine();
                byte[] bs = Encoding.ASCII.GetBytes(sendStr);
                temp.Send(bs, bs.Length, 0);
            }

            End:
            {
                //关闭Server端Socket
                temp.Close();
                s.Close();
                Console.WriteLine("Socket Server closed!");
            }
        }
    }
}


再来看Client端

1 . 确定端口及主机IP;

2 . 利用IP初始化IPAddress类型的实例;

3 . 利用端口及IPAddress类型的实例初始化IPEndPoint类的实例;

4 . 新建Socket对象;

5 . 向Server发送消息;

6 . 接收到Servert端返回的消息;

7 . 关闭Socket;

View code:

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

namespace SocketTestClient
{
    class Program
    {
        static void Main(string[] args)
        {
            //确定Server端端口及IP
            int port = 2000;
            string host = "127.0.0.1";

            //利用IP创建IPAddress类型的实例
            IPAddress ip = IPAddress.Parse(host);
            //利用端口及IPAddress类型的实例创建IPEndPoint类的实例
            IPEndPoint ipe = new IPEndPoint(ip, port);
            
            //创建socket并连接到服务器
            Socket c = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            Console.WriteLine("Client Conneting…");
            c.Connect(ipe);

            while (true)
            {
                ///向Server发送信息
                Console.WriteLine("Please input your message!");
                string sendStr = Console.ReadLine();
                byte[] bs = Encoding.ASCII.GetBytes(sendStr);
                Console.WriteLine("Send Message");
                c.Send(bs, bs.Length, 0);

                ///接受从Server返回的信息
                string recvStr = "";
                byte[] recvBytes = new byte[1024];
                int bytes;
                bytes = c.Receive(recvBytes, recvBytes.Length, 0);
                recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes);
                Console.WriteLine("Client get message : {0}", recvStr);

                //如果Server返回“Exit”消息,则关闭Client端Socket
                if (recvStr.Equals("Exit"))
                {
                    Console.WriteLine("Socket Server closed , Client close now!");
                    goto End;
                }
            }

            End:
            {
                //关闭Client端Socket
                c.Close();
                Console.WriteLine("Client closed!");
            }
        }
    }
}
1 0
原创粉丝点击