private int ConnectToPC() { //소켓 설정 sck = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Parse(ip), 8080); //Connect try { sck.Connect(localEndPoint); } catch { Debug.Log("Unable to connect to remote end point!\r\n"); return(0); } Debug.Log("Perfect!!"); //Buffer = new byte[NetworkController.MAXBUFFERSIZE];//sck.socketbuffersize 에서 변경 //시그널 수신 //char s; NetFunc.net_recv_signal(sck); //플레이어 정보 수신 SC_CONNECT_PACKET SCpack = new SC_CONNECT_PACKET(); object obj; obj = NetFunc.net_recv(sck, NetworkController.SC_CONNECT); if (obj == null) { return(0); //error } SCpack = (SC_CONNECT_PACKET)obj; // Debug.Log((int)SCpack.id + " " + SCpack.color); My_Info = SCpack; //시그널 전송 NetFunc.net_send_signal(NetworkController.CS_CONNECT, sck); //닉네임 전송 CS_CONNECT_PACKET CSpacket = new CS_CONNECT_PACKET(); CSpacket.nickname = name; CSpacket.id = SCpack.id; buffer = NetFunc.ObjToByte(CSpacket); NetFunc.net_send(CSpacket, sck, NetworkController.CS_CONNECT); //비동기 시작 IAsyncClient sync_obj = new IAsyncClient(); sync_obj.sck = sck; buffer = new byte[NetworkController.MAXBUFFERSIZE]; sck.BeginReceive(sync_obj.recvbuf, 0, NetworkController.MAXBUFFERSIZE, 0, new AsyncCallback(ReciveCallBack), sync_obj); return(1); }
public void AcceptCallback(IAsyncResult ar) { Socket listener = (Socket)ar.AsyncState; Socket handler = listener.EndAccept(ar); // 받는 방식의 변화 재접속... int id = 0; for (int i = 0; i < 4; ++i) { if (false == connected[i]) { id = i; break; } } if (client_sock.Count >= NetworkController.MAX_CONNECT) { handler.Disconnect(false); } client_sock.Add(handler); if (false == isgamescene) { CC.connected(id); } else { GS.reconnected(id); } NC.net_send_signal(NetworkController.SC_CONNECT, handler); SC_CONNECT_PACKET packet = new SC_CONNECT_PACKET(); packet.id = (char)id; switch (id) { case 0: packet.color = 'b'; break; case 1: packet.color = 'y'; break; case 2: packet.color = 'r'; break; case 3: packet.color = 'g'; break; default: //error break; } Debug.Log("Player Color : " + packet.color); NC.net_send(packet, handler, NetworkController.SC_CONNECT); connected[id] = true; IAsyncClient iaclient = new IAsyncClient(); iaclient.s = handler; iaclient.id = id; iaclient.recvbyte = 0; clients.Add(iaclient); handler.BeginReceive(iaclient.recvbuf, 0, NetworkController.MAXBUFFERSIZE, 0, new AsyncCallback(DataReceive), iaclient); sck.BeginAccept(new AsyncCallback(AcceptCallback), listener); s_arr[id] = handler;//5.15 홍승준 추가 }