I’m writing a server for creating an online chat in a WindowsFormsApp and encountered an error in ReceiveAsync and SendAsync. How can I fix it?
The issues start with trying to pass an argument into ReceiveAsync and SendAsync, resulting in an error about invalid arguments.
Server.cs
using System;
using System.Net;
using System.Net.Sockets;
using System.Security.Policy;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
public class HostInformationFetcherServer
{
public async Task<IPHostEntry> GetHostEntryAsync()
{
try
{
string hostName = Dns.GetHostName();
IPHostEntry ipEntry = await Dns.GetHostEntryAsync(hostName);
IPAddress ip = ipEntry.AddressList[0];
//connects the server socket to client socket
IPEndPoint iPEndPoint = new IPEndPoint(ip, 1234);
Socket server = new Socket(
iPEndPoint.AddressFamily,
SocketType.Stream,
ProtocolType.Tcp
);
server.Bind(iPEndPoint);
server.Listen(10);
Console.WriteLine("Server started Listening on port: 1234");
var handler = await server.AcceptAsync();
while (true)
{
byte[] buffer = new byte[1024];
SocketAsyncEventArgs args;
//var received = await handler.ReceiveAsync(new ArraySegment<byte>, buffer);
var received = await handler.ReceiveAsync(buffer, SocketFlags.None); /*ERROR*/
//convert bytes to string message
var messageString = Encoding.UTF8.GetString(buffer, 0, received);
if (messageString != null)
{
Console.WriteLine("Message from client: {0}", messageString);
var response = "Message Received!";
var responseByte = Encoding.UTF8.GetBytes(response);
await handler.SendAsync(responseByte, SocketFlags.None); /*ERROR*/
}
}
}
catch (System.Exception ex)
{
Console.WriteLine($"An error occurred: {ex.Message}");
return null;
}
}
}
Client.cs
using System;
using System.Net;
using System.Net.Sockets;
using System.Security.Policy;
using System.Text;
using System.Threading.Tasks;
//Server code
//info about our localhost -- includes the ip address
public class HostInformationFetcherClient
{
public async Task<IPHostEntry> GetHostEntryAsync()
{
try
{
string hostName = Dns.GetHostName();
IPHostEntry ipEntry = await Dns.GetHostEntryAsync(hostName);
IPAddress ip = ipEntry.AddressList[0];
//connects the server socket to client socket
IPEndPoint iPEndPoint = new IPEndPoint(ip, 1234);
Socket client = new Socket(
iPEndPoint.AddressFamily,
SocketType.Stream,
ProtocolType.Tcp
);
await client.ConnectAsync(iPEndPoint);
while (true)
{
Console.Write("Send A Message:");
var message = Console.ReadLine();
//convert the string message to bytes message
var messageBytes = Encoding.UTF8.GetBytes(message);
//sends the message to the server
await client.SendAsync(messageBytes, SocketFlags.None); /*ERROR*/
var buffer = new byte[1024];
var received = await client.ReceiveAsync(buffer, SocketFlags.None); /*ERROR*/
}
}
catch (System.Exception ex)
{
Console.WriteLine($"An error occurred: {ex.Message}");
return null;
}
}
}
I tried to find out what types of data are used for ReceiveAsync and SendAsync.
New contributor
WANderer is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.