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

来源:互联网 发布:python 字典值为数组 编辑:程序博客网 时间:2024/05/20 03:07

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;
            }
           
        }
    }
}

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 被小兔子抓一下怎么办 兔子吃了蟑螂药怎么办 兔子洗了澡要死怎么办 养的花蔫了怎么办 养的小鸡很大了怎么办 养的小兔子死了怎么办 小狗出现爬跨行为怎么办 养的小狗总做吞咬人的行为怎么办 螃蟹和柿子一起吃了怎么办 指甲上月牙没了怎么办 手指上月牙没了怎么办 指甲上没半月牙怎么办 电动车车牌被偷了怎么办 警察拖车拖坏了怎么办 6岁儿童牙疼怎么办 小白单车不退押金怎么办 光盘放笔记本电脑里读不出来怎么办 cd光盘读不出来怎么办 最近脸干的不行怎么办 脸感觉干的不行怎么办 新生儿睡觉黑白颠倒了怎么办 婴儿吐水和奶花怎么办 刚刚出生的宝宝拉肚子怎么办 刚出生的婴儿拉肚子怎么办 新生儿5天拉稀水怎么办 10个月孩子拉肚子怎么办 不满月的宝宝拉肚子怎么办 一周岁宝宝发烧腹泻呕吐怎么办 6个月宝宝37度怎么办 1岁宝宝发烧37.2怎么办 新生儿发烧37度3怎么办 两个月宝宝抵抗力差怎么办 6月宝宝着凉拉稀怎么办 六个月的宝宝拉肚子怎么办 衣服颜色太深了怎么办 一多半宝宝爱喝水不爱吃饭怎么办 十个月宝宝不爱吃饭怎么办 十个月宝宝突然不爱吃饭怎么办 二十个月宝宝不爱吃饭怎么办 十个月的宝宝不爱吃饭怎么办 6年级学生数学差怎么办