C#socket类初步了解(客户端与服务端的建立)

1.建立过程

服务端:

(1)建立socket

2)socket.bind(绑定ip,dns)

3) 建立客户端sock(socke.accetp返回连接的客户端);

4)通信socket.send/recieve(发送/接受客户端信 息),当然还有其他信息传输方法~

5)关闭socket(服务端要实施监控,可以不用关闭

客户端:

1)建立 socket;

2)socket.conect(ip,服务器端口)//连接服务器

 3)通信 socket.send/receive(还有其他方式);

4)关闭(socket.close());

 

/*******************实例**********/

客户端读取服务端的的电脑显示时间

我是建立在控制台上的程序

写的不好 仅供参考;

 

/*******************************/

DateTimeServer.sln

 

server.cs

//

 

 

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

namespace DateTimeServer
{
    class Server
    {
        static void Main(string[] args)
        {
            try
            {
                //
                String hostname = Dns.GetHostName();//获得本机域名
                IPAddress serverIp = Dns.GetHostEntry(hostname).AddressList[0];//本机ip

                //DateTimeServer port =13
                String Port = "13";//端口号设为13


                IPEndPoint serverHost = new IPEndPoint(serverIp, Int32.Parse(Port));

                Socket serverSocket = new Socket(
                    AddressFamily.InterNetwork,
                    SocketType.Stream, ProtocolType.Tcp);


                serverSocket.Bind(serverHost);

                //backlog=50;
                serverSocket.Listen(50);// 设置最大连接客户端50个


                Console.WriteLine("dateTime server started at :" +
                    serverHost.Address.ToString() + ":" + Port);


                ListenClient lc = new ListenClient(serverSocket);

                ThreadStart serverThreadStart = new ThreadStart(lc.ServerThreadPro);
                Thread serverThread = new Thread(serverThreadStart);

                serverThread.Start();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.StackTrace.ToString());
            }
            finally
            {
            }

        }
    }
}

///

ListenClient.cs

//

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

namespace DateTimeServer
{
    public class ListenClient
    {
        private System.Net.Sockets.Socket serverSocket;
        private System.Net.Sockets.Socket clientSocket;


        //构造函数
        public ListenClient(Socket serverSocket)
        {
            this.serverSocket = serverSocket;
        }

        public void ServerThreadPro()
        {
            while (true)
            {
                try
                {
                    clientSocket = serverSocket.Accept();

                    IPEndPoint clientInfo = (IPEndPoint)
                    clientSocket.RemoteEndPoint;//获得客户端信息
                    IPEndPoint serverIfo = (IPEndPoint)
                    serverSocket.LocalEndPoint;//获得服务端信息


                    Console.WriteLine("Client: " + clientInfo.Address.ToString() + ":" +
                        clientInfo.Port.ToString());
                    Console.WriteLine("Server:" + serverSocket.AddressFamily.ToString() + ":" +
                        serverIfo.Port.ToString());

                    String strDate = DateTime.Now.ToShortDateString() + "" +
                        DateTime.Now.ToLongTimeString();

                    byte[] byteDate =
                        Encoding.ASCII.GetBytes(strDate.ToCharArray());

                    clientSocket.Send(byteDate, 0, byteDate.Length, SocketFlags.None);//向客户端发送信息

                    Console.WriteLine("to client: " + clientInfo.Address.ToString() +
                        ":" + clientInfo.Port.ToString() + ":" + strDate);

                    clientSocket.Shutdown(SocketShutdown.Both);
                    clientSocket.Close();
                }
                catch(Exception ex){
                    Console.WriteLine(ex.StackTrace.ToString());

                    if (clientSocket.Connected)
                        clientSocket.Close();
                }
            }
        }
    }
}

 

 

客户端:

Client.cs

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

namespace DateTimeClient
{
    class Client
    {
        static void Main(string[] args)
        {
            try
            {
                Socket clientSocket = new Socket(AddressFamily.InterNetwork,
                    SocketType.Stream, ProtocolType.Tcp);
                IPAddress serverIp = IPAddress.Parse("172.19.82.54");
                IPEndPoint serverHost = new IPEndPoint(serverIp, Int32.Parse("13"));

                clientSocket.Connect(serverHost);


                byte[] recvByte = new byte[1024];

                int i = clientSocket.Receive(recvByte, 0, clientSocket.Available, SocketFlags.None);


                string dateTime = Encoding.ASCII.GetString(recvByte, 0, i);

                Console.WriteLine("receive{0}bytes", i);
                Console.WriteLine("current server date/Time:{0}", dateTime);


                clientSocket.Close();
                return;
            }
            catch (Exception ex)
            {
                ex.StackTrace.ToString();
                return;
            }
           
        }
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值