C# TCPIP编程

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_44913038/article/details/102745233

c#的tcpip通信需要用到 tcpclient、tcplistener、networkstream
下面为客户端的程序
客户端程序分为四个部分:
1、创建一个tcplient(实例化)
2、连接到服务器(需要服务器端的ip地址)
3、创建网络流networkstream(数据传输的通道)
4、开始接受和发送数据

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

namespace tcp
{
    class Program
    {
        static void Main(string[] args)
        {
            TcpClient client = new TcpClient(); //实例化
            client.Connect("127.0.0.1", 8000); //连接到服务器,由于服务器运行在本机,所以这里使用本机ip地址
            NetworkStream stream = client.GetStream();//创建networkstream
                if (stream.CanWrite == true)//判断是否可以发送数据
                {
                    Byte[] mybyte = Encoding.UTF8.GetBytes("Hello");//将“hello”按utf-8编码,转成字节类型,存到数组里
                    stream.Write(mybyte, 0, mybyte.Length);

                }
                else
                {
                    Console.Write("无法写入");
                    client.Close();
                    stream.Close();
                    return;
                }

                if (stream.CanRead == true)//判断是否可以接收数据
                {
                    Byte[] bytes = new byte[1024];
                    int j = stream.Read(bytes,0,bytes.Length);//获取接收到数据的长度
                    string returndata = Encoding.UTF8.GetString(bytes,0,j);//将接收的数据按utf-8编码转成字符串,存到returndata里
                    Console.Write("返回数据:{0}", returndata);
                }
                else
                {
                    Console.Write("无法读取数据");
                    client.Close();
                    stream.Close();
                    return;
                }
            
            stream.Close();
            while (true)
            { }//死循环,防止窗口关闭
        }

    }
}

下面为服务器端程序
服务器端程序分为四部分:
1、新建一个listener,并将listener绑定到本机的ip地址和端口上
2、listener开始监听,当监听到客户端的连接我请求后,与客户端连接
3、连接成功后创建networkstream
4、开始接受和发送数据

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

namespace tcpserver
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                int port = 8000;//端口号
                IPAddress addr = IPAddress.Parse("127.0.0.1");//本机ip地址
                TcpListener listener = new TcpListener(addr, port);//创建listener,并绑定到本机的ip地址
                listener.Start();//开始监听
                Byte[] bytes = new byte[10];
                string data = null;

                    Console.Write("wait for connecting......\n");
                    TcpClient client = listener.AcceptTcpClient();//等待客户端连接请求,没连接成功之前一直停留在这条语句上
                    Console.Write("connected\n");
                    data = null;
                    NetworkStream stream = client.GetStream();//创建网络流
                    int i;

                    while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)//判断接收到的数据是否为空,当不为空是进入循环
                    {
                        data = System.Text.Encoding.ASCII.GetString(bytes, 0, i);//编码接收到的数据,并存到data
                        Console.WriteLine("接受信息:{0}", data);
                        data.ToUpper();
                        byte[] msg = System.Text.Encoding.ASCII.GetBytes(data);//将接收到的数据转成发送的格式
                        stream.Write(msg, 0, msg.Length);//发送数据
                        Console.Write("发送信息:{0}", data);

                    }
                    client.Close();
                    listener.Stop();

                

            }
            catch (SocketException e)
            {
                Console.WriteLine(e);
            }
            while (true)
            { }//死循环,防止程序运行完后窗口关闭
        }
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_44913038/article/details/102745233