void DataReceived(IAsyncResult ar) { // BeginReceive에서 추가적으로 넘어온 데이터를 AsyncObject 형식으로 변환한다. AsyncObject obj = (AsyncObject)ar.AsyncState; // 데이터 수신을 끝낸다. int received = obj.WorkingSocket.EndReceive(ar); // 받은 데이터가 없으면(연결끊어짐) 끝낸다. if (received <= 0) { obj.WorkingSocket.Close(); return; } formMadeByRcv = true; GetChatForm(this, "ClientForm2"); string text = Encoding.UTF8.GetString(obj.Buffer); Control ctrl = Control.FromHandle(this.formHandle); ClientForm2 clf2 = (ClientForm2)ctrl; clf2.AppendText(string.Format("관리자: {0}", text)); obj.ClearBuffer(); // 수신 대기 obj.WorkingSocket.BeginReceive(obj.Buffer, 0, 4096, 0, DataReceived, obj); }
private void ClientForm3_Load(object sender, EventArgs e) { IPHostEntry he = Dns.GetHostEntry(Dns.GetHostName()); // 처음으로 발견되는 ipv4 주소를 사용한다. foreach (IPAddress addr in he.AddressList) { if (addr.AddressFamily == AddressFamily.InterNetwork) { thisAddress = addr; break; } } if (mainSock.Connected) { MessageBox.Show("이미 연결되어 있습니다!"); return; } int port = 8081; try { mainSock.Connect(thisAddress, port); } catch (Exception ex) { MessageBox.Show("연결에 실패했습니다!", ex.Message, MessageBoxButtons.OK); return; } AsyncObject obj = new AsyncObject(4096); obj.WorkingSocket = mainSock; byte[] bDts = Encoding.UTF8.GetBytes(myNum.ToString()); obj.WorkingSocket.Send(bDts); mainSock.BeginReceive(obj.Buffer, 0, obj.BufferSize, 0, DataReceived, obj); }
void DataReceived(IAsyncResult ar) { // BeginReceive에서 추가적으로 넘어온 데이터를 AsyncObject 형식으로 변환한다. AsyncObject obj = (AsyncObject)ar.AsyncState; // 데이터 수신을 끝낸다. int received = obj.WorkingSocket.EndReceive(ar); if (received > 0) { string text = Encoding.UTF8.GetString(obj.Buffer); if (text.Contains("SignUpFail")) { MessageBox.Show("이미 존재하는 아이디입니다."); isOK = false; } else if (text.Contains("SignUpSuccess")) { MessageBox.Show("사용 가능한 아이디입니다."); isOK = true; } else { MessageBox.Show("서버가 아이디를 인식하지 못했습니다."); } obj.ClearBuffer(); // 수신 대기 obj.WorkingSocket.BeginReceive(obj.Buffer, 0, 4096, 0, DataReceived, obj); } // 받은 데이터가 없으면(연결끊어짐) 끝낸다. else if (received <= 0) { obj.WorkingSocket.Close(); return; } }
void DataReceived(IAsyncResult ar) { // BeginReceive에서 추가적으로 넘어온 데이터를 AsyncObject 형식으로 변환한다. AsyncObject obj = (AsyncObject)ar.AsyncState; // 데이터 수신을 끝낸다. int received = obj.WorkingSocket.EndReceive(ar); if (received > 0) { string text = Encoding.UTF8.GetString(obj.Buffer); //Debug.WriteLine(text); text = text.Trim('\0'); if (text.Contains("ProductList")) //상품 목록 출력 { text = text.Replace("ProductList", ""); string[] receivedString = text.Split('\x02'); string[] temp; for (int i = 0; i < receivedString.Length - 1; i++) { temp = receivedString[i].Split('\x01'); ListViewItem lvitem = new ListViewItem(temp); LvItemAppend(lvMenuList, lvitem); } LvSetColor(lvMenuList, Color.Red); obj.ClearBuffer(); // 수신 대기 obj.WorkingSocket.BeginReceive(obj.Buffer, 0, 4096, 0, DataReceived, obj); } else if (text.Contains("OrderSuccessed")) { OrderSuccessed(); } else if (text.Contains("OrderFailed")) { OrderFailed(); } else //상품 이미지 출력 { ReceivedArray temp = new ReceivedArray(received); temp.arr = (byte[])obj.Buffer.Clone(); byteList.Add(temp); obj.ClearBuffer(); // 수신 대기 obj.WorkingSocket.BeginReceive(obj.Buffer, 0, 4096, 0, DataReceived, obj); } } // 받은 데이터가 없으면(연결끊어짐) 끝낸다. else if (received <= 0) { obj.WorkingSocket.Close(); return; } }
private void btnConnect_Click(object sender, EventArgs e) { Socket tempSock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP); if (txtID.Text == "" || txtPW.Text == "") { MessageBox.Show("아이디와 비밀번호를 기입해 주십시오."); return; } int port; if (!int.TryParse(txtPort.Text, out port)) { MessageBox.Show("포트 번호가 잘못 입력되었거나 입력되지 않았습니다."); txtPort.Focus(); txtPort.SelectAll(); return; } try { tempSock.Connect(txtAddress.Text, port); } catch (Exception ex) { MessageBox.Show("연결에 실패했습니다!", ex.Message, MessageBoxButtons.OK); return; } AsyncObject obj = new AsyncObject(4096); obj.WorkingSocket = tempSock; byte[] check = new byte[5000]; check = Encoding.UTF8.GetBytes(txtID.Text + '\x01' + txtPW.Text); tempSock.Send(check); byte[] isgood = new byte[100]; tempSock.Receive(isgood); if (Encoding.UTF8.GetString(isgood).Contains("GoodToLogin")) { mainSock = tempSock; byte[] bDts = new byte[5000]; mainSock.Receive(bDts); myNum = Convert.ToInt32(Encoding.UTF8.GetString(bDts)); mainSock.BeginReceive(obj.Buffer, 0, obj.BufferSize, 0, DataReceived, obj); btnOrder.Enabled = true; btnQuit.Enabled = true; btnOpenChat.Enabled = true; btnConnect.Enabled = false; btnSignUp.Enabled = false; txtAddress.Enabled = false; txtID.Enabled = false; txtPort.Enabled = false; txtPW.Enabled = false; } else if (Encoding.UTF8.GetString(isgood).Contains("LoginDisabled")) { MessageBox.Show("로그인이 불가능합니다."); tempSock.Dispose(); } }