Socket(2)

来源:互联网 发布:linux grub2启动img 编辑:程序博客网 时间:2024/09/21 08:19

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

namespace Client
{
    public class Connect
    {
        private Socket _client; //跟服务器连接的socket
        private bool _connected; //socket连接状态,表示断开或已经连接两种情况

        //连接服务器
        public void ConnectServer(string ip, int port)
        {
            //创建一个Socket
            _client = new Socket(
                AddressFamily.InterNetwork,
                SocketType.Stream,
                ProtocolType.Tcp);

            IPEndPoint ep = new IPEndPoint(IPAddress.Parse(ip), port);//把ip和端口转化为IPEndPoint实例

            _client.Connect(ep);
            _connected = true;
        }

        //监听服务器
        public void ListenServer(string ip, int port)
        {

            IPEndPoint ep = new IPEndPoint(IPAddress.Parse(ip), port);//把ip和端口转化为IPEndPoint实例

            //创建一个Socket
            _client = new Socket(
                AddressFamily.InterNetwork,
                SocketType.Stream,
                ProtocolType.Tcp);

            _client.Bind(ep);//绑定EndPoint对像(2000端口和ip地址)
            _client.Listen(0);//开始监听

 

           // _client.Connect(ep);
            _connected = true;
        }

        //返回连接状态
        public bool Connected
        {
            get { return _connected; }
        }
        //关闭连接
        public void CloseConnection()
        {
            if (_connected)
            {
                _client.Close();
                _connected = false;
            }
        }
        //发送消息
        public void SendMessage(string message)
        {
            byte[] buffer = Encoding.ASCII.GetBytes(message);
            _client.Send(buffer, buffer.Length, 0);
        }

        /// <summary>
        /// //从服务器端接受返回信息
        /// </summary>
        /// <returns></returns>
        public string ReceiveBytes(string recvStr)
        {
            byte[] recvBytes = new byte[1024];
            int bytes;
            bytes = _client.Receive(recvBytes, recvBytes.Length, 0);
            recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes);
            return recvStr;
        }

        public  Socket Accept_socket()
        {
            return _client.Accept();
        }

    }
}

 

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

namespace Client
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                int port = 2000;
                string host = "127.0.0.1";

                /**/
                ///创建终结点EndPoint
               // IPAddress ip = IPAddress.Parse(host);
                //IPAddress ipp = new IPAddress("127.0.0.1");
               // IPEndPoint ipe = new IPEndPoint(ip, port);//把ip和端口转化为IPEndpoint实例


                ///**/
                /////创建socket并连接到服务器
                //Socket c = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建Socket
                //Console.WriteLine("Conneting…");
                //c.Connect(ipe);//连接到服务器


                ///**/
                /////向服务器发送信息
                //string sendStr = "hello!This is a socket test";
                //byte[] bs = Encoding.ASCII.GetBytes(sendStr);//把字符串编码为字节
                //Console.WriteLine("Send Message");
                //c.Send(bs, bs.Length, 0);//发送信息


                ///**/
                /////接受从服务器返回的信息
                //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);//显示服务器返回信息

                ///**/
                /////一定记着用完socket后要关闭
                //c.Close();

                Connect cc = new Connect();
                Console.WriteLine("Conneting...");
                cc.ConnectServer(host, port);//连接到服务器
                string sendStr = "hello!This is a socket test";
                Console.WriteLine("Send Message");
                cc.SendMessage(sendStr);//发送测试信息
                string recvStr = "";
                recvStr = cc.ReceiveBytes(recvStr);
                Console.WriteLine("Client Get Message:{0}", recvStr);//显示服务器返回信息
                cc.CloseConnection();

            }
            catch (ArgumentNullException e)
            {
                Console.WriteLine("argumentNullException: {0}", e);
            }
            catch (SocketException e)
            {
                Console.WriteLine("SocketException:{0}", e);
            }

            Console.WriteLine("Press Enter to Exit");
        }
    }
}

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

namespace server
{
    class Program
    {
        static void Main(string[] args)
        {
            int port = 2000;
            string host = "127.0.0.1";

            Connect c = new Connect();
            c.ListenServer(host, port);           
            Console.WriteLine("等待客户端连接");


            /**/
            ///接受到client连接,为此连接建立新的socket,并接受信息
            //Socket temp = s.Accept();//为新建连接创建新的socket
            Console.WriteLine("建立连接");
            Socket temp = c.Accept_socket();
            string recvStr = "";
            byte[] recvBytes = new byte[1024];
            int bytes;
            bytes = temp.Receive(recvBytes, recvBytes.Length, 0);//从客户端接受信息
            recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes);

            /**/
            ///给client端返回信息
            Console.WriteLine("server get message:{0}", recvStr);//把客户端传来的信息显示出来
            string sendStr = "ok!Client send message successful!";
            byte[] bs = Encoding.ASCII.GetBytes(sendStr);
            temp.Send(bs, bs.Length, 0);//返回信息给客户端
            temp.Close();
            c.CloseConnection();
            Console.ReadLine();
        }

    }
}