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();
}
}
}
客户端Socket(同步方式)
于 2022-04-28 19:53:01 首次发布