가 나는 Asynchronous Communication in C#비동기 통신
을 만드는 방법에 대한 자습서를 참조하지만 하나에 하나의 대화를 나눌 수 있습니다,
는 내가 서버를 사용하지 않고 보관할 수 ? 나는 C#에서 새로운 사람이기 때문에 무엇을해야할지 모른다.
미리 감사드립니다.
가 나는 Asynchronous Communication in C#비동기 통신
을 만드는 방법에 대한 자습서를 참조하지만 하나에 하나의 대화를 나눌 수 있습니다,
는 내가 서버를 사용하지 않고 보관할 수 ? 나는 C#에서 새로운 사람이기 때문에 무엇을해야할지 모른다.
미리 감사드립니다.
나는 "서버"라는 단어로 거의 오해하지 않는다고 생각합니다. 그것은 웹 서버가 아니며 요청을 처리하는 서적 컴퓨터 (또는 응용 프로그램)입니다. 다중 사용자 채팅의 경우 서버와 클라이언트의 두 종류의 응용 프로그램을 만들어야합니다. 서버는 클라이언트를 청취하고 회신합니다. 일반적으로 하나의 서버와 많은 클라이언트가 있습니다. 간단한 서버/클라이언트 프로그램을 작성하고 개선하기를 제안합니다. 한 번에 한 명의 사용자 만 서비스 할 서버를 만듭니다. 로컬 IP의 특정 포트를 청취합니다. 나는 작업을 사용하여 프로그램을 단순화합니다.
byte[] ba = new byte[1024];
new Task(() => {
Output("Going to listen to messages...");
Socket listeningS = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// Listening to local address. You should listen to external IP for real server
IPEndPoint ep = new IPEndPoint(IPAddress.Any, port);
listeningS.Bind((EndPoint)ep);
// One and only client at a time :)
listeningS.Listen(1);
while (isRunning)
{
// Accept client, receive data and send it back
Socket clientS = listeningS.Accept();
int total = clientS.Receive(ba, 0, ba.Length, SocketFlags.None);
total = clientS.Send(ba, 0, total, SocketFlags.None);
// Client will open new connection (but later it is possible to use same)
clientS.Shutdown(SocketShutdown.Both);
clientS.Close();
}
}).Start();
그런 다음 가장 쉬운 부분 인 클라이언트 응용 프로그램에서 시작하여 데이터를 연결하고 보내고받습니다. 당신이 할 일은해야
byte[] ba = Encoding.UTF8.GetBytes(message);
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
s.Connect(IPAddress.Loopback, port);
total = s.Send(ba, SocketFlags.None);
total = s.Receive(ba, 0, ba.Length, SocketFlags.None);
if (total > 0)
{
Output(Encoding.UTF8.GetString(ba, 0, total));
}
다음 것은 당신의 서버 스레드/비동기를 구현하는 것입니다 :) 물론
정보 주셔서 감사합니다. – MarckxMan
나는 당신이 요점을 얻고 앞으로 나아갈 것이기를 바랍니다 :) –
, 당신은 할 수있다. 그러나 서버를 사용하여 * 채팅을 시도하십시오. 또는 XMPP 클라이언트를 구현하십시오. –
WinForm 응용 프로그램을 사용 중입니다. – MarckxMan
사람들이 내 대답을 왜 downvoted했는지 모르겠으므로 방금 삭제했습니다. @ liran63에 나는 모든 PC가 서버가 될 수 있음을 잘 알고 있습니다. 그래서 내가 의미하는 바는 ... 공통 서버없이 2 대 이상의 PC 채팅을 할 수는 없다는 것입니다. 이것에 대해 조금이라도 궁금하신 점이 있으시면 공유하십시오. 그러나 저는 이미 인터넷 연결을 통해 Winforms, WPF 및 Web을 수행했으며, 제 경험으로 볼 때 공통 서버가 없으면 이런 일은 결코하지 않았습니다. 내가 틀렸을 수도있다. 그러나 OP는 구체적으로 '여러 대의 PC와 채팅'한다고 말했다. 그리고 '하나 하나'로, 나는 그가 단지 2 대의 컴퓨터 채팅을 의미했다는 것을 확신한다. 내가 그 말을 제대로 했니? –