CS/네트워크
[네트워크] C# 1대1 채팅 (소켓 프로그래밍)
using System;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.IO;
namespace Client
{
public partial class client : Form
{
Thread ReceiveThread;
bool Conneted;
public Socket sender;
byte[] bytes = new byte[1024];
public int port;
public IPAddress ip;
public string server_data = null;
public client()
{
InitializeComponent();
}
private void MainForm_FormClosing(object sender, FormClosedEventArgs e)
{
Conneted = false;
ReceiveThread.Abort();
}
private void Start_Server()
{
try
{
IPEndPoint remoteEP = new IPEndPoint(ip, port);
sender = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
sender.Connect(remoteEP); //서버 연결
Conneted = true;
}
catch
{
}
}
catch
{
}
}
public void PrintToTextBox()
{
byte[] msg = Encoding.ASCII.GetBytes(textBox1.Text);
int bytesSent = sender.Send(msg);
Console.WriteLine(bytesSent);
textBox2.AppendText("클라이언트 : " + textBox1.Text + "\r\n");
}
private void Send_Click(object sender, EventArgs e)
{
PrintToTextBox();
}
public void Receive()
{
server_data = null;
try
{
while (Conneted)
{
int server_receive = sender.Receive(bytes);
if (server_receive != 0)
{
server_data += Encoding.ASCII.GetString(bytes, 0, server_receive);
textBox2.AppendText("서버 : " + server_data + "\r\n");
}
}
}
catch (Exception e)
{
}
}
private void textBox2_TextChanged(object sender, EventArgs e)
{
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
port = int.Parse(textBox4.Text);
ip = IPAddress.Parse(textBox3.Text);
Start_Server();
Thread thread_server;
thread_server = new Thread(new ThreadStart(Receive));
thread_server.Start();
}
private void textBox3_TextChanged(object sender, EventArgs e)
{
}
private void textBox4_TextChanged(object sender, EventArgs e)
{
}
private void MainForm_Load(object sender, EventArgs e)
{
}
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Threading;
using System.Net.Sockets;
using System.Net;
using System.IO;
namespace Server
{
public partial class server : Form
{
byte[] bytes = new Byte[1024];
public Socket handler;
bool Conneted;
public string client_data = null;
Thread ReceiveThread;
public server()
{
InitializeComponent();
}
private void MainForm_FormClosing(object sender, FormClosedEventArgs e)
{
Conneted = false;
ReceiveThread.Abort();
}
private void StartServer()
{
byte[] bytes = new Byte[1024];
IPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName());
IPAddress ipAddress = ipHostInfo.AddressList[0];
IPEndPoint localEndPoint = new IPEndPoint(ipAddress, (자신의 포트번호));
textBox2.AppendText("서버 IP: "+ ipAddress + "\r\n"+"서버 port : (자신의 포트번호)"+"\r\n");
Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
listener.Bind(localEndPoint);
listener.Listen(10);
client_data = null;
handler = listener.Accept();
String clientinfor = handler.RemoteEndPoint.ToString();
textBox2.Text += "현재 연결 ip: "+clientinfor + "\r\n\n";
Conneted = true;
while(Conneted)
{
int bytesRec = handler.Receive(bytes);
Console.WriteLine(bytesRec);
if (bytesRec != 0)
{
Encoding Enc = Encoding.ASCII;
client_data += Enc.GetString(bytes, 0, bytesRec);
textBox2.AppendText("클라이언트 : " + client_data);
client_data = null;
}
//handler.Shutdown(SocketShutdown.Both);
//handler.Close();
}
}catch(Exception e)
{
Console.WriteLine(e.ToString());
}
}
private void button3_Click(object sender, EventArgs e) //보내는 버튼
{
PrintToTextBox();
}
public void PrintToTextBox()
{
byte[] msg = Encoding.ASCII.GetBytes(textBox1.Text);
int bytesSent = handler.Send(msg);
Console.WriteLine(bytesSent);
textBox2.AppendText("서버 : "+textBox1.Text+"\r\n");
//대화창.AppendText(Context);
//대화창.ScrollTOCaret();
}
private void textBox2_TextChanged(object sender, EventArgs e)
{
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
ReceiveThread = new Thread(new ThreadStart(StartServer));
ReceiveThread.Start();
}
private void MainForm_Load(object sender, EventArgs e)
{
}
}
}
궁금하신 부분 있으면 댓글 다세요.
이번에 과제하면서 C#을 처음 접해본거라 조금 힘들었어요.
귀찮기도 하고 모르겠기도 해서 서버 종료, 클라이언트에서 서버 접속 끊기는 구현 안했습니다.
'CS/네트워크'의 다른글
- 현재글[네트워크] C# 1대1 채팅 (소켓 프로그래밍)