작성
·
745
·
수정됨
0
************** 예외 텍스트 **************
System.Net.Sockets.SocketException (10061): 대상 컴퓨터에서 연결을 거부했으므로 연결하지 못했습니다.
at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.ThrowException(SocketError error, CancellationToken cancellationToken)
at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.System.Threading.Tasks.Sources.IValueTaskSource.GetResult(Int16 token)
at System.Threading.Tasks.ValueTask.ValueTaskSourceAsTask.<>c.<.cctor>b__4_0(Object state)
--- End of stack trace from previous location ---
at Client.Singleton.ConnectAsync() in P:\Chat\Client\Singleton.cs:line 36
at Client.LoginForm.btn_login_Click(Object sender, EventArgs e) in P:\Chat\Client\LoginForm.cs:line 20
at System.Threading.Tasks.Task.<>c.<ThrowAsync>b__128_0(Object state)
16:45초 로그인 할 때 이렇게 뜨네요 ㅠㅠ
해당 라인 가보면
LoginForm.cs
await Singleton.Instance.ConnectAsync();
Singleton.cs
await Socket.ConnectAsync(endPoint);
입니다. 아이피와 포트도 제대로 입력해주었습니다.
강사님이 올려주신 파일 통째로 받아서 해봤는데도 동일한 오류가 발생합니다.
어떻게 해결해야하나요?
코드 첨부합니다.
LoginForm.cs
using Core;
namespace Client;
public partial class LoginForm : Form
{
public LoginForm()
{
InitializeComponent();
}
private async Task btn_login_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(tbx_id.Text) || string.IsNullOrEmpty(tbx_nickname.Text))
{
MessageBox.Show("입력하세요");
return;
}
await Singleton.Instance.ConnectAsync();
LoginRequestPacket packet = new LoginRequestPacket(tbx_id.Text, tbx_nickname.Text);
await Singleton.Instance.Socket.SendAsync(packet.Serialize(), System.Net.Sockets.SocketFlags.None);
Singleton.Instance.Id = tbx_id.Text;
Singleton.Instance.Nickname = tbx_nickname.Text;
RoomList roomList = new RoomList();
roomList.ShowDialog();
}
}
Singleton.cs
using System.Net;
using System.Net.Sockets;
namespace Client;
/// <summary>
/// 언제 어디서나 접근할 수 있는 객체.
/// 이 객체는 반드시 1개만 존재해야 한다.
/// </summary>
internal class Singleton
{
public string Id { get; set; } = null!;
public string Nickname { get; set; } = null!;
public Socket Socket { get; } = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
private static Singleton? instance;
public static Singleton Instance
{
get
{
if (instance == null)
instance = new Singleton();
return instance;
}
}
private Singleton()
{
}
public async Task ConnectAsync()
{
IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse("192.168.219.106"), 20001);
await Socket.ConnectAsync(endPoint);
ThreadPool.QueueUserWorkItem(ReceiveAsync, Socket);
}
private async void ReceiveAsync(object? sender)
{
Socket socket = (Socket)sender!;
byte[] headerBuffer = new byte[2];
while (true)
{
#region 헤더버퍼 가져옮
int n1 = await socket.ReceiveAsync(headerBuffer, SocketFlags.None);
if (n1 < 1)
{
Console.WriteLine("client disconnect");
socket.Dispose();
return;
}
else if (n1 == 1)
{
await socket.ReceiveAsync(new ArraySegment<byte>(headerBuffer, 1, 1), SocketFlags.None);
}
#endregion
#region 데이터버퍼 가져옮
short dataSize = IPAddress.NetworkToHostOrder(BitConverter.ToInt16(headerBuffer));
byte[] dataBuffer = new byte[dataSize];
int totalRecv = 0;
while (totalRecv < dataSize)
{
int n2 = await socket.ReceiveAsync(new ArraySegment<byte>(dataBuffer, totalRecv, dataSize - totalRecv), SocketFlags.None);
totalRecv += n2;
}
#endregion
}
}
}
답변 1
-1
원인은 다양합니다.
서버를 키지 않았다던지, 정말로 IP나 Port가 잘못됐다던지,
방화벽 때문에 접속이 안된다던지,
구글링 또는 ChatGPT 한테 물어봐서 이런류의 에러도 해결해보는 능력을 가지시는것도 좋을거 같아요.