C#之Socket编程

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;//Encoding类
using System.Threading.Tasks;
using System.Net.Sockets;
using System.Net;
namespace TCPServer
{
    class Program
    {
        static void Main(string[] args)
        {
            //Dep:UPD的形式,发散流
            Socket server_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //TCP的,流不能断
      
            //获取到主机IP地址
            //返回指定主机的ip,(获取本机主机的名字)
            IPAddress[] ips = Dns.GetHostAddresses(Dns.GetHostName());//一个网卡是一个ip

            for (int i = 0; i < ips.Length; i++)
            {
                Console.WriteLine (ips[i]);
            }
            //创建ip节点,指定ip地址和端口号
            //dns类:提供简单的域名解析功能
            IPEndPoint ipendPoint = new IPEndPoint(ips[1],2222);//ip和端口(c#的优点,把ip和端口承兑处理)
            //用IPEndPoint对象表示一个特定的ip和端口组成
            //127.0.0.1本地ip
             server_socket.Bind(ipendPoint);

            server_socket.Listen(40);//最大可以监听多少个连接

            while (true)
            {
                //用于存储客户端发送的数据,socket只能使用字节数组传输
                byte[]data = new byte[1024];
                int recv = 0;//用来记录传输数据字节长度

                Console.WriteLine("Wait");
                //等待客户端连接,当有客户端连接时,将返回客户端socket
                Socket client = server_socket.Accept();//接收请求//用来接收客户端的socket啦,三次握手核心
                IPEndPoint clientIP = (IPEndPoint)client.RemoteEndPoint;//获取远程终节点.IPEND继承endPoint
                Console.WriteLine("connect with client"+clientIP.Address);

                string server_mag = "welcome here";
                //把字符串按照中文的编码方式编码成Bytes类型的字节流数组
                data = Encoding.ASCII.GetBytes(server_mag);

                //发送消息给客户端
                client.Send(data, data.Length, SocketFlags.None);
                while(true){
                    data = new byte[1024];
                    //等待客户端发送消息,返回值为数据长度,参数为承接数据数组
                    string client_msg = "";
                //    data = Encoding.ASCII.GetBytes(client_msg);
                    recv = client.Receive(data);//等待客户端消息
                    //收到的客户端发来的值的长度,这个data是发过来的真正值,在这头用data接收了

                    client_msg = Encoding.ASCII.GetString(data,0,recv);
              // Encoding.Default.GetString//当前页面的编码形式将字符串转换成字节数组
                 //   Encoding.Default.GetBytes
                    if (client_msg=="exit")
                    {
                        break;
                    }

                    //打印消息
                    Console.WriteLine("client"+client_msg);
                    Console.WriteLine("请输入:");
                    server_mag = Console.ReadLine();
                    Console.WriteLine(server_mag);
                    data = new byte[1024];
                   data = Encoding.ASCII.GetBytes(server_mag);
          
                
                    //获取data的长度
                 
                    client.Send(data,data.Length,SocketFlags.None);//将数据发送到指定的连接Socket
                }

                Console.WriteLine("Disconnect from"+clientIP.Address);
                //关闭连接
                server_socket.Close();

            }
        
        }
    }
}


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Net.Sockets;
using System.Text;
namespace MyClient
{
    class Program
    {
        static void Main(string[] args)
        {
            Socket client_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  //       string ip = "192.168.108.101";
            string ip = "192.168.108.71";
            IPAddress ipAddress = IPAddress.Parse(ip);
            IPEndPoint ipEndpoint = new IPEndPoint(ipAddress,2222);

          
          try
          {
              client_socket.Connect(ipEndpoint);
          }
          catch (Exception e)
          {
              Console.WriteLine("faild to connect server");
              Console.WriteLine(e.ToString());
          }

          byte[] data;
          int rev;
          string msg = "";
          while (true)
          {
              data = new byte[1024];
              rev =  client_socket.Receive(data);//接到了
              msg = Encoding.ASCII.GetString(data,0,rev);
              Console.WriteLine(msg+"服务器发送来的");

              //输入
              Console.WriteLine( "请输入");
              msg = Console.ReadLine();
              if (msg=="exit")
              {
                  client_socket.Send(data, data.Length, SocketFlags.None);
                  break;
              }

          

              data = new byte[1024];
              data = Encoding.ASCII.GetBytes(msg);
              //给服务器发送消息
              client_socket.Send(data,data.Length,SocketFlags.None);
          }
      

          client_socket.Shutdown(SocketShutdown.Both);

          client_socket.Close();


        }
    }
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值