void start_client() { if (WSA.WSA_Startup(wsaData) != 0) { log_txt.Text = "Все плохо с всастартап"; } else { log_txt.Text = "Все ок с всастартап"; } UDP_socket = WSA.Socket(WSA.SOCK_STREAM_UDP, WSA.PPROTO_UDP); if (UDP_socket != new IntPtr(-1)) { log_txt.Text += "\r\nУДП сокет создан: " + UDP_socket.ToString(); } else { log_txt.Text += "\r\nУДП сокет неработит"; } TCP_socket = WSA.Socket(WSA.SOCK_STREAM_TCP, WSA.PPROTO_TCP); if (TCP_socket != new IntPtr(-1)) { log_txt.Text += "\r\nТСП сокет создан: " + TCP_socket.ToString(); } else { log_txt.Text += "\r\nТСП сокет не работит"; } }
void recvServerUDP() { byte[] recvBuff = new byte[512]; int SizeAddr = Marshal.SizeOf(SockAddrServer); string result; string Source; while (true) { int iResult; iResult = WSA.recvfrom(UDP_socket, recvBuff, 512, WSA.SocketFlags.None, ref SockAddrServer, ref SizeAddr); if (iResult > 0) { Source = Encoding.Default.GetString(recvBuff); result = regexFunc(@"Iconnecttheserver", Source); if (result == "Iconnecttheserver") { AddTextSafe("Сервер найден!: " + new IPAddress(BitConverter.GetBytes(SockAddrServer.sin_addr)).ToString()); ChangeTextIPSafe(new IPAddress(BitConverter.GetBytes(SockAddrServer.sin_addr)).ToString()); SockAddrServer = new WSA.sockaddr(); return; } } else if (iResult == 0 || iResult == -1) { AddTextSafe("Сервер не найден"); break; } } }
void send(string str) { byte[] sendBuff = new byte[512]; sendBuff = Encoding.Default.GetBytes(str); WSA.Send(TCP_socket, sendBuff, 512, 0); sendBuff = null; }
void restart_client() { WSA.Close_Socket(UDP_socket); log_txt.Text += "\r\nUDP socket destroy"; WSA.Close_Socket(TCP_socket); log_txt.Text += "\r\nTCP socket destroy"; ChangeFormTextSafe("Risovalko"); mySTATUS = 0; start_client(); }
void connect_client() { if (WSA.Connect(textBox1.Text, Convert.ToInt32(textBox3.Text), TCP_socket) != -1) { log_txt.Text += "\r\nПодключение к серверу установлено"; } else { log_txt.Text += "\r\nНет подключения к серверу"; } new Thread(delegate() { recvServerTCP(); }).Start(); }
void SendBroadcast() { byte[] sendBuff = Encoding.Default.GetBytes("Imyourserverprodigalson"); string result = regexFunc(@"[0-9]+\.[0-9]+\.[0-9]+\.", MyIP); SockAddrServer.sin_addr = WSA.inet_addr(result + "255"); SockAddrServer.sin_port = WSA.htons((short)Convert.ToInt32(textBox3.Text)); SockAddrServer.sin_family = 2; if (WSA.sendto(UDP_socket, sendBuff, 512, WSA.SocketFlags.None, ref SockAddrServer, Marshal.SizeOf(SockAddrServer)) != -1) { new Thread(delegate() { recvServerUDP(); }).Start(); } else { AddTextSafe("Широковещалка не работает"); } }
//events private void MainForm_FormClosed(object sender, FormClosedEventArgs e) { WSA.Close_Socket(UDP_socket); WSA.Close_Socket(TCP_socket); WSA.WSA_Cleanup(); }
void recvServerTCP() { byte[] recvBuff = new byte[512]; string Source; send("IYOUCLIENT"); while (true) { int iResult; iResult = WSA.Recv(TCP_socket, recvBuff, 512, 0); if (iResult > 0) { Source = Encoding.Default.GetString(recvBuff); if (regexFunc(@"IAMHERE", Source) == "IAMHERE") { send("IAMHERETOO"); int tv = 2000; WSA.setsockopt(TCP_socket, 65535, 4102, ref tv, Marshal.SizeOf(tv)); continue; } int CommandType = Convert.ToInt32(regexFunc(@"CommandType=[0-9]+", Source).Substring(12)); switch (CommandType) { case 0: string str = regexFunc(@"Text=\W\w+", Source); if (str.Length > 0) { if (str.Substring(5) == "!start") { lock (this) Graphics.FromImage(pictureBox1.Image).Clear(Color.White); } } str = Source.Substring(0, 5) + " " + Source.Substring(26); AddTextSafe(str); recvBuff = new byte[512]; break; case 1: int x, y; string X, Y; X = regexFunc(@"X=\d+", Source).Substring(2); x = Convert.ToInt32(X); Y = regexFunc(@"Y=\d+", Source).Substring(2); y = Convert.ToInt32(Y); ((Bitmap)pictureBox1.Image).SetPixel(x, y, Color.Black); PBSafeRefresh(); recvBuff = new byte[512]; break; case 2: clients.Clear(); Match match_client_ip = regexFuncMass(@"client=[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+", Source); Match match_client_socket = regexFuncMass(@"socket=[0-9]+", Source); Match match_client_status = regexFuncMass(@"status=[0-9]", Source); Match match_client_results = regexFuncMass(@"result=[0-9]+", Source); while ((match_client_ip.Success) && (match_client_status.Success) && (match_client_results.Success)) { Client cclient; cclient.ip = match_client_ip.Value.Substring(7); cclient.game_bill = Convert.ToInt32(match_client_results.Value.Substring(7)); cclient.game_status = Convert.ToInt32(match_client_status.Value.Substring(7)); cclient.socket = match_client_socket.Value.Substring(7); clients.Add(cclient.socket, cclient); match_client_socket = match_client_socket.NextMatch(); match_client_ip = match_client_ip.NextMatch(); match_client_status = match_client_status.NextMatch(); match_client_results = match_client_results.NextMatch(); } Update_list(); recvBuff = new byte[512]; break; case 3: if (mySTATUS == 1) { mySTATUS = 0; MessageBox.Show("Ваше слово одгадали! +10"); ChangeFormTextSafe("Risovalko"); } else { mySTATUS = 1; string str2 = Source.Substring(13); ChangeFormTextSafe("Рисовалец. Слово: " + str2); } break; } Source = null; } else if (iResult == 0 || iResult == -1) { AddTextSafe("Сервер отключился!"); ChangeFormTextSafe("Risovalko"); mySTATUS = 0; break; } } recvBuff = null; }