Piotrek1910 Opublikowano 26 Maja 2014 Udostępnij Opublikowano 26 Maja 2014 Witajcie, zacząłem bawić się z Netwokingiem w C#. No i już problemy na początku. Czy da się jakoś przechwycić czyjś socket? Tak jak da się w Netwokingu w GMS lub w 39dll. Tak wygląda mój kod przyjmujący nowe połączenie: Socket Socket = Server.AcceptSocket(); Console.WriteLine("Nowe połaczenie o id: {0}. Ip: {1} ",i,Socket.RemoteEndPoint); Utworzyłem sobie klase: class Player { public Socket sock; }; Chciałem przenieś wartość z Socket do Players.sock. Niby program się kompiluje ale kiedy program już czeka na clienta i client dolącza program zawiesza się na ten o to linijce. A chciałbym takie zapisywanie socketów by zrobic jakiś silnik MMO. Pozdrawiam. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Utermiko Opublikowano 28 Maja 2014 Udostępnij Opublikowano 28 Maja 2014 1) Pokaż cały kod bo z tego nic nie wynika. 2) AcceptSocket jest domyślnie operacją blokującą. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Piotrek1910 Opublikowano 29 Maja 2014 Autor Udostępnij Opublikowano 29 Maja 2014 class Player { public string sock; }; static void Main(string[] args) { Version version = Assembly.GetExecutingAssembly().GetName().Version; Console.WriteLine("Wersja kompilacji: {0}",version); int i = 0; Player[] Players = new Player[255]; IPAddress ip = IPAddress.Parse("127.0.0.1"); TcpListener Server = new TcpListener(ip, 69); Server.Start(); Console.WriteLine("Ip serwera:" + Server.LocalEndpoint); Console.WriteLine("Czekam na połączenia..."); while(true) { i++; System.Threading.Thread.Sleep(5); Socket Socket = Server.AcceptSocket(); Console.WriteLine("{2} dołączył. Jego id: {1} oraz Ip: {0} ", Socket.RemoteEndPoint, i, Odbierz(Socket)); Console.WriteLine("X = {0} Y = {1}", Odbierz(Socket), Odbierz(Socket)); } } static int Wyslij(string text, Socket sock) { try { byte[] data = Encoding.ASCII.GetBytes(text); sock.Send(data); return 1; } catch { return 0; } } static string Odbierz(Socket Socket) { byte[] bajt = new byte[1024]; int imessage = 0; string message = ""; imessage = Socket.Receive(bajt); for (int l = 0; l < imessage; l++) { message = message + Convert.ToChar(bajt[l]); } return message; } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Utermiko Opublikowano 29 Maja 2014 Udostępnij Opublikowano 29 Maja 2014 Jak wywołujesz Receive na sockecie to ta metoda czeka do tąd aż jakieś dane przyjdą. Poszukaj sobie na google przykładów jak stworzyć asynchroniczny serwer (metody Begin[...] i End[...]) http://msdn.microsoft.com/en-us/library/fx...(v=vs.110).aspx http://sonyarouje.com/2011/11/25/multi-cli...ous-tcp-server/ Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Piotrek1910 Opublikowano 30 Maja 2014 Autor Udostępnij Opublikowano 30 Maja 2014 Dzięki, sprawdzę. A z tym przypisywaniem Socketa do zmiennej to nic się nie da? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Utermiko Opublikowano 30 Maja 2014 Udostępnij Opublikowano 30 Maja 2014 Tak nawiasem mówiąc, to twoja zmienna ma taką samą nazwę jak klasa. Troszkę to nieczytelne, aczkolwiek poprawne. A z tym przypisywaniem Socketa do zmiennej to nic się nie da? AcceptSocket jest funkcją blokującą i dlatego ci zawiesza. Zainteresuj się metodami asynchronicznymi co podałem ci w poprzednim poście. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się