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
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}");
|
|
}
|
|
}
|
|
}
|
|
} |