客户端Socket(同步方式)

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

namespace ClientTest
{
    internal class Program
    {
        static Socket ClientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//使用指定的地址簇协议、套接字类型和通信协议
        static void Main(string[] args)
        {
            string ip = "127.0.0.1";
            int port = 8885;
            int arrayLength = 1024;
            try
            {
                ConnectToServer(ClientSocket, ip, port);
            }
            catch (Exception)
            {
                Console.WriteLine("连接失败");
            }

            Console.WriteLine($"{ClientSocket.LocalEndPoint.ToString()}开始发送消息,请输入要发送的信息:");
            while (true)
            {
                string str = Console.ReadLine();
                if (str == "")
                {
                    Console.WriteLine("字符不能为空!");
                }
                else
                {
                    SendMsgToServer(ClientSocket, str);
                    ReceiveMsgFromServer(ClientSocket, arrayLength);
                }
            }
            CloseClient(ClientSocket);          //关闭连接
            Console.ReadKey();
        }

        /// <summary>
        /// 客户端连接至服务端
        /// </summary>
        /// <param name="clientSocket">客户端的socket</param>
        /// <param name="ip">客户端ip地址</param>
        /// <param name="port">进程端口号</param>
        private static void ConnectToServer(Socket socket, string ip, int port)
        {
            IPAddress address = IPAddress.Parse(ip);  //将IP地址字符串转换成IPAddress实例
            IPEndPoint endPoint = new IPEndPoint(address, port); // 用指定的ip和端口号初始化IPEndPoint实例
            socket.Connect(endPoint);  //与远程主机建立连接
        }

        /// <summary>
        /// 客户端发送消息至服务端
        /// </summary>
        /// <param name="clientSocket">客户端的socket</param>
        /// <param name="str">客户端发送的消息</param>
        private static void SendMsgToServer(Socket socket, string str)
        {
            
            byte[] message = Encoding.UTF8.GetBytes(str);
            int length = socket.Send(message);
            Console.WriteLine("发送消息为:" + Encoding.UTF8.GetString(message));
        }
        
        /// <summary>
        /// 客户端接收来自服务端的消息
        /// </summary>
        /// <param name="socket">客户端的socket</param>
        /// <param name="arrayLength">自定义字节数组最大长度</param>
        /// <returns>返回接收到的消息的字节数组长度<</returns>
        private static int ReceiveMsgFromServer(Socket socket, int arrayLength)
        {
            byte[] receive = new byte[arrayLength];
            int length = socket.Receive(receive);  // length 接收字节数组长度
            Console.WriteLine("接收消息为:" + Encoding.UTF8.GetString(receive));
            return length;
        }

        /// <summary>
        /// 关闭客户端的socket
        /// </summary>
        /// <param name="socket">客户端的socket</param>
        private static void CloseClient(Socket socket)
        {
            socket.Close();
        }
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值