You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

67 lines
1.8 KiB

using System.Net;
using System.Net.Sockets;
using System.Text;
namespace Client;
internal class Client
{
static void Main(string[] args)
{
using (Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp))
{
IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 20000);
socket.Connect(endPoint);
while (true)
{
string str = Console.ReadLine() ?? string.Empty;
if (str == "exit")
return;
byte[] buffer = Encoding.UTF8.GetBytes(str);
byte[] newBuffer = new byte[2 + buffer.Length];
byte[] dataSize = BitConverter.GetBytes(IPAddress.HostToNetworkOrder((short)buffer.Length));
Array.Copy(dataSize, 0, newBuffer, 0, dataSize.Length);
Array.Copy(buffer, 0, newBuffer, 2, buffer.Length);
socket.Send(newBuffer);
byte[] headerBuffer = new byte[2];
int headerReceive = socket.Receive(headerBuffer);
if (headerReceive < 1)
{
Console.WriteLine("Disconnecting client...");
return;
}
else if (headerReceive == 1)
{
socket.Receive(headerBuffer, 1, 1, SocketFlags.None);
}
short totalDataSize = IPAddress.NetworkToHostOrder(BitConverter.ToInt16(headerBuffer));
byte[] dataBuffer = new byte[totalDataSize];
int dataReceived = 0;
while (dataReceived < totalDataSize)
{
int n = socket.Receive(dataBuffer, dataReceived, totalDataSize - dataReceived, SocketFlags.None);
dataReceived += n;
}
string receivedMessage = Encoding.UTF8.GetString(dataBuffer);
Console.WriteLine($"[Received] {receivedMessage}");
//byte[] buffer2 = new byte[256];
//int byteRead = socket.Receive(buffer2);
//if (byteRead < 1)
//{
// Console.WriteLine("Disconnecting server...");
// return;
//}
//string str2 = Encoding.UTF8.GetString(buffer2);
//Console.WriteLine($"[Receive] {str2}");
}
}
}
}