gpt4 book ai didi

c# - 套接字编程 C# 聊天服务

转载 作者:行者123 更新时间:2023-11-30 17:34:17 27 4
gpt4 key购买 nike

我知道这个问题可能太笼统了,但是 C# 套接字编程背后的概念是什么?我能够使用以下代码与自己发送/接收数据:

//client side?
using System;
using System.Text;
using System.Net;
using System.Net.Sockets;

namespace client1
{
class Program
{

private static Socket _clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

static void Main(string[] args)
{
Console.Title = "Client";
LoopConnect();
SendLoop();
}

private static void SendLoop()
{
while (true)
{
Console.Write("Enter a request: ");
string req = Console.ReadLine();
byte[] buffer = Encoding.ASCII.GetBytes(req);
_clientSocket.Send(buffer);

byte[] receivedBuf = new byte[1024];
int rec = _clientSocket.Receive(receivedBuf);
byte[] data = new byte[rec];
Array.Copy(receivedBuf, data, rec);
Console.WriteLine("Received: " + Encoding.ASCII.GetString(data));
}
}

private static void LoopConnect()
{

int attempts = 0;

while (!_clientSocket.Connected)
{
try
{
attempts++;

_clientSocket.Connect(IPAddress.Loopback, 100);
}
catch (SocketException)
{
Console.Clear();
Console.WriteLine("Connection attempts: " + attempts.ToString());
}
}

Console.Clear();
Console.WriteLine("Connected");
}
}
}


//server side?
using System;
using System.Collections.Generic;
using System.Text;
using System.Net.Sockets;
using System.Net;

namespace server1
{
class Program
{
private static List<Socket> _clientSockets = new List<Socket>();
private static Socket _serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
private static byte[] _buffer = new byte[1024];

static void Main(string[] args)
{
Console.Title = "Server";
SetupServer();
Console.ReadLine();
}

private static void SetupServer()
{
Console.WriteLine("Setting up server...");
_serverSocket.Bind(new IPEndPoint(IPAddress.Any, 100));
_serverSocket.Listen(5);
_serverSocket.BeginAccept(new AsyncCallback(AcceptCallback), null);
}

private static void AcceptCallback(IAsyncResult AR)
{
Socket socket = _serverSocket.EndAccept(AR);
_clientSockets.Add(socket);
Console.WriteLine("Client connected...");
socket.BeginReceive(_buffer, 0, _buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveCallback), socket);
_serverSocket.BeginAccept(new AsyncCallback(AcceptCallback), null);
}

private static void ReceiveCallback(IAsyncResult AR)
{
Socket socket = (Socket)AR.AsyncState;
int received = socket.EndReceive(AR);

byte[] dataBuf = new byte[received];
Array.Copy(_buffer, dataBuf, received);

string text = Encoding.ASCII.GetString(dataBuf);
Console.WriteLine("Text received: " + text);

string response = string.Empty;

if (text.ToLower() != "get time")
{
response = "Invalid Request";
} else
{
response = DateTime.Now.ToLongDateString();
}

//if (text.ToLower() == "get time")
//{
//SendText(DateTime.Now.ToLongTimeString());
//byte[] data = Encoding.ASCII.GetBytes(DateTime.Now.ToLongTimeString());
//socket.BeginSend(data, 0, data.Length, SocketFlags.None, new AsyncCallback(SendCallback), socket);
//}

byte[] data = Encoding.ASCII.GetBytes(DateTime.Now.ToLongTimeString());
socket.BeginSend(data, 0, data.Length, SocketFlags.None, new AsyncCallback(SendCallback), socket);
socket.BeginReceive(_buffer, 0, _buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveCallback), socket);
}

private static void SendCallback(IAsyncResult AR)
{
Socket socket = (Socket)AR.AsyncState;
socket.EndSend(AR);
}
}
}

但是,当我在运行 server.exe 时将 client.exe 交给同一网络上的 friend 时,他无法连接到我。有人对我做错了什么有任何建议吗?

最佳答案

根据您问题中的当前代码,客户端尝试连接到环回 (127.0.0.1),因此如果服务器是 安装在不同机器上。

如果这是一个拼写错误并且您已经正确配置了 IP 地址,请仔细检查没有防火墙阻止请求。

关于c# - 套接字编程 C# 聊天服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42753457/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com