C# TCP网络连接入门示例

首先编写服务端控制台程序:

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

namespace TCPserver
{
    class Server
    {
        static void Main(string[] args)
        {
            int recv;
            //缓存流入流出的消息
            byte[] data = new byte[1024];

            //该服务器可接收可配置在系统中任何网络接口上的接入连接请求
            IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 9050);
            Socket newsock = new Socket(AddressFamily.InterNetwork,
                SocketType.Stream, ProtocolType.Tcp);
            //套接字与ip,端口绑定
            newsock.Bind(ipep);

            //套接字收听接入连接
            newsock.Listen(10);

            Console.WriteLine("waiting for a client...");

            //接收来自客户机的接入连接尝试,
            //返回一个新的套接字,在于客户机的通信中使用这个新的套接字
            Socket client = newsock.Accept();//同步方法

            //客户机的ip和端口信息
            IPEndPoint clientep = (IPEndPoint)client.RemoteEndPoint;
            Console.WriteLine("connected with {0} at port {1}", clientep.Address, clientep.Port);

            string welcom = "welcom to my test server";
            data = Encoding.ASCII.GetBytes(welcom);

            //发出欢迎信息
            client.Send(data, data.Length, SocketFlags.None);

            //循环等待来自客户端的信息
            while (true)
            {
                //Recive在使用buffer的同时,重新设置了buffer的大小,因此重新设置为原大小
                data = new byte[1024];
                recv = client.Receive(data);//同步方法
                if (recv == 0)
                {
                    break;//客户端退出则服务器端退出                 
                }
                Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv));
                client.Send(data, recv, SocketFlags.None);//发出应答信息               
            }

            Console.WriteLine("disconnected from {0}", clientep.Address);
            client.Close();//关闭客户机套接字
            newsock.Close();//不需要其它的连接关闭原始的套接字
        }
    }
}

运行如下,等待客户端的连接,

 

再编写客户端的控制台程序:

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

namespace TCPClient
{
    class Client
    {
        static void Main(string[] args)
        {
            //缓存流入流出的消息
            byte[] data = new byte[1024];

            String input, stringData;//用于显示的临时变量

            //初始化要连接的ip和端口号
            IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9050);

            //创建套接字
            Socket server = new Socket(AddressFamily.InterNetwork,
                SocketType.Stream, ProtocolType.Tcp);
            try
            {
                //将套接字与远程主机相连,此时服务器端应该已经启动Accept
                server.Connect(ipep);
            }
            catch (SocketException e)//连接异常处理
            {
                Console.WriteLine("Unable to connect to server.");
                Console.WriteLine(e.ToString());
                return;
            }
            //根据事先约定,连接后服务器会发欢迎信息,所以接受数据
            int recv = server.Receive(data);

            stringData = Encoding.ASCII.GetString(data, 0, recv);
            Console.WriteLine(stringData);

            while (true)
            {
                input = Console.ReadLine();
                if(input == "exit")
                {
                    break;
                }
                server.Send(Encoding.ASCII.GetBytes(input));
                data = new byte[1024];//Receive之后,将data的大小还原
                recv = server.Receive(data);
                stringData = Encoding.ASCII.GetString(data, 0, recv);
                Console.WriteLine(stringData);
            }
            Console.WriteLine("Disconnecting from server...");
            server.Shutdown(SocketShutdown.Both);//可以只关闭读或者写
            server.Close();
        }
    }
}

启动客户端后,会自动连接服务端9050端口,并显示收到的服务端信息,同时服务端显示连接上的客户端信息:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值