C#网络编程日记2

来源:互联网 发布:苹果数据开关快捷键 编辑:程序博客网 时间:2024/05/29 19:57

一,tcp协议

Tcp程序有服务器端和可客户端,服务器端通常在一个众所周知的地址监听对服务的请求,就是说服务器处于休眠状态,知道客户端对服务器提出了连接请求。


Server端程序执行步骤如下:

1.打开一个通信通道,并告知本地主机,他愿意在某一地址和端口上接收客户连接请求。

2.等待客户请求到达该端口。

3.接收到重复服务请求,处理该请求并发出应答信号。接收到并发服务请求,激活一个新的进程或者线程来处理这个客户请求。新进程或者线程处理此客户请求,并不需要对其他请求作出应答。服务完成后,关闭此新进程与客户的通信链路,并终止。

4.返回第二步,等待另一客户请求。

5.关闭服务器。


Client端程序执行步骤如下:

1.打开一个通信通道,并连接到服务器所在主机的特定端口。

2.向服务器发服务请求报文,等待并接受应答,继续提出请求。

3.请求结束后关闭通信通道并终止。


套接字工作原理:

1.服务器套接字监听全网

2.客户端套接字向服务端套接字发出连接请求。

3.当服务器端监听到客户端套接字的连接请求时,他就响应客户端套接字请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一点客户端确认了此描述,连接就建立好了。而服务器端始终处于监听状态,继续接受其他客户端套接字的连接请求。



使用socket实现tcp程序:

服务器端:

        public Form1()        {            InitializeComponent();            //IPAddress监听所有地址            IPEndPoint localIPEndPoint = new IPEndPoint(IPAddress.Any, 6001);            Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);            serverSocket.Bind(localIPEndPoint);            serverSocket.Listen(10);            while (true)            {                //在accept处等待客户端的connect                clientSocket = serverSocket.Accept();                Thread receiveThread = new Thread(receiveData);                receiveThread.Start();                Thread sendThread = new Thread(sendData);                sendThread.Start();            }        }        private void sendData()        {            byte[] buffer = new byte[2];            buffer = Encoding.UTF8.GetBytes("owen");            clientSocket.Send(buffer,buffer.Length,SocketFlags.None);        }        private void receiveData()        {            byte[] buffer = new byte[2048];           //在receive处等待客户端发送信息过来             int len = clientSocket.Receive(buffer);            string message = Encoding.UTF8.GetString(buffer,0,len);                    }

客户端:

        private Socket clientSocket;        public Form1()        {            InitializeComponent();            //这里的ipEndPoint是服务器端的ip和port            IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Parse("10.131.38.79"),6001);            clientSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);            //connect用于发起连接客户端            clientSocket.Connect(ipEndPoint);            Thread receiveThread = new Thread(receiveData);            receiveThread.Start();            Thread sendThread = new Thread(sendData);            sendThread.Start();                    }        private void sendData()        {            //当这里发送了信息,服务端的receiveData就能接收信息            byte[] buffer = new byte[2048];            buffer = Encoding.UTF8.GetBytes("welcome");            clientSocket.Send(buffer, buffer.Length, SocketFlags.None);        }        private void receiveData()        {            byte[] buffer = new byte[2048];            int len = clientSocket.Receive(buffer);            string message = Encoding.UTF8.GetString(buffer, 0, len);                    }

另一种简便的Tcp编程方法——TcpListener和TcpClient

服务器端:

        private NetworkStream netStream;        private TcpClient tcpClient;        private BinaryReader reader;        public Form1()        {            InitializeComponent();                        TcpListener tcpListener = new TcpListener(IPAddress.Any, 13000);            tcpListener.Start();            while(true)            {                tcpClient = tcpListener.AcceptTcpClient();                Thread receiveThread = new Thread(receiveData);                receiveThread.Start();                //Thread sendThread = new Thread(sendData);                //sendThread.Start();            }        }        private void receiveData()        {            netStream = tcpClient.GetStream();            reader = new BinaryReader(netStream);            string receivemessage = reader.ReadString();            Console.WriteLine("message ="+receivemessage);        }

客户端:

        private TcpClient tcpClient;        private NetworkStream netStream;        private BinaryWriter writer;        public Form1()        {            InitializeComponent();            tcpClient = new TcpClient();            tcpClient.Connect(IPAddress.Parse("10.131.38.79"), 13000);            Thread sendThread = new Thread(sendData);            sendThread.Start();        }        private void sendData()        {            netStream = tcpClient.GetStream();            writer = new BinaryWriter(netStream);            writer.Write("welcome");        }



原创粉丝点击