2015. 4. 2. 14:42
C# with TCP/IP
프로그램 설명
텍스트와 이미지 파일을 전송하는 예제입니다.
규칙은 아래 그림과 같습니다.
실행 후
연결 후
텍스트 전송 후
이미지 파일 전송 후
프로그램 작성 순서
1. 서버 프로그램
전체 소스는 아래에 있으며, 핵심적인 내용의 소스만 갈무리해서 올립니다.
public void ReceiveAsync() { socket.BeginReceive(lenBuffer, 0, lenBuffer.Length, SocketFlags.None, receiveCallBack, null); } public void receiveCallBack(IAsyncResult ar) { try { int rec = socket.EndReceive(ar); if (rec == 0) { if (Disconnected != null) { Disconnected(this); return; } } if (rec != 4) { throw new Exception(); } } catch(SocketException se) { switch(se.SocketErrorCode) { case SocketError.ConnectionAborted: case SocketError.ConnectionReset: if (Disconnected != null) { Disconnected(this); return; } break; } } catch(ObjectDisposedException) { return; } catch(NullReferenceException) { return; } catch (Exception ex) { Console.WriteLine(ex.Message); return; } buffer = new ReceiveBuffer(BitConverter.ToInt32(lenBuffer, 0)); socket.BeginReceive(buffer.Buffer, 0, buffer.Buffer.Length, SocketFlags.None, receivePacketCallBack, null); } public void receivePacketCallBack(IAsyncResult ar) { int rec = socket.EndReceive(ar); if (rec <= 0) { return; } buffer.BufStream.Write(buffer.Buffer, 0, rec); buffer.ToReceive -= rec; if (buffer.ToReceive > 0) { Array.Clear(buffer.Buffer, 0, buffer.Buffer.Length); socket.BeginReceive(buffer.Buffer, 0, buffer.Buffer.Length, SocketFlags.None, receivePacketCallBack, null); return; } if (DataReceived != null) { buffer.BufStream.Position = 0; DataReceived(this, buffer); } buffer.Dispose(); ReceiveAsync(); }
2. 클라이언트 프로그램
전체 소스는 아래에 있으며, 핵심적인 내용의 소스만 갈무리해서 올립니다.
void SendText(string text) { BinaryWriter bw = new BinaryWriter(new MemoryStream()); bw.Write((int)Commands.String); bw.Write(text); byte[] data = ((MemoryStream)bw.BaseStream).ToArray(); bw.BaseStream.Dispose(); client.Send(data, 0, data.Length); data = null; } void SendImage(string path) { MemoryStream ms = new MemoryStream(); BinaryWriter bw = new BinaryWriter(ms); byte[] b = File.ReadAllBytes(path); bw.Write((int)Commands.Image); bw.Write((int)b.Length); bw.Write(b); bw.Close(); b = ms.ToArray(); ms.Dispose(); client.Send(b, 0, b.Length); }
'C# with TCP/IP' 카테고리의 다른 글
[Program C#] 패킷을 이용한 데이타 전송 (0) | 2015.05.25 |
---|---|
[Program C#] Check all client connection. (0) | 2015.05.20 |
[Program C#]이미지 파일과 텍스트 전송 - 1 (0) | 2015.03.26 |
[Program C#] SslStream 을 이용한 통신 방법 (1) | 2015.03.20 |
[Program C#] 서버-클라이언트 채팅 통신 (0) | 2015.03.17 |