Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.IO;
- using System.Net.Sockets;
- using System.Windows.Forms;
- namespace TCPchatic
- {
- public partial class Form1 : Form
- {
- TcpClient client = new TcpClient();
- TcpListener server = new TcpListener(System.Net.IPAddress.Any, 20113);
- delegate void RecieveTextDelegate(string text);
- RecieveTextDelegate param;
- public Form1()
- {
- InitializeComponent();
- server.Start();
- param = new RecieveTextDelegate(textBoxChat.AppendText);
- BeginAcceptTcpClient();
- }
- void BeginAcceptTcpClient()
- {
- server.BeginAcceptTcpClient(x =>
- {
- var remoteClient = server.EndAcceptTcpClient(x);
- BeginAcceptTcpClient();
- var from = remoteClient.Client.RemoteEndPoint.ToString();
- var binReader = new BinaryReader(remoteClient.GetStream());
- while (remoteClient.Connected)
- {
- var type = (MsgType)binReader.ReadByte();
- switch (type)
- {
- case MsgType.Text:
- var mtext = new MsgText(binReader);
- this.Invoke(param, new object[] { from + ": " + mtext.Text + "rn" });
- break;
- case MsgType.File:
- var mFile = new MsgFile(binReader);
- this.Invoke(param, new object[] { string.Format("{0}: файл "{1}" Размер {2}б rn", from, mFile.Name, mFile.FileLen) });
- if (MessageBox.Show(string.Format("{0} отправил файл "{1}", размер {2} б. Принять?", from, mFile.Name, mFile.FileLen), "Прием файла", MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.Yes)
- {
- var saveDialog = new SaveFileDialog();
- saveDialog.FileName = mFile.Name;
- if (saveDialog.ShowDialog() == DialogResult.OK)
- {
- using (var file = saveDialog.OpenFile())
- {
- new BinaryWriter(file).Write(mFile.File);
- }
- }
- }
- break;
- }
- }
- }, null);
- }
- private void button1_Click(object sender, EventArgs e)
- {
- try
- {
- if (client.Connected) client.Close();
- client.Connect(textBoxIP.Text, 20113);
- }
- catch (Exception ex)
- {
- MessageBox.Show(ex.Message);
- }
- }
- private void button2_Click(object sender, EventArgs e)
- {
- new BinaryWriter(client.GetStream()).Write((byte)MsgType.Text);
- new BinaryWriter(client.GetStream()).Write(textBoxMsg.Text);
- textBoxChat.AppendText("Я: " + textBoxMsg.Text + " rn");
- textBoxMsg.Clear();
- }
- private void button3_Click(object sender, EventArgs e)
- {
- var openDialog = new OpenFileDialog();
- if (openDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
- {
- using(var file = openDialog.OpenFile())
- {
- var mFile = new MsgFile()
- {
- Name = openDialog.SafeFileName,
- FileLen = (int)file.Length,
- File = new BinaryReader(file).ReadBytes((int)file.Length)
- };
- mFile.Write(client.GetStream());
- }
- }
- }
- enum MsgType: byte
- {
- Text,
- File
- }
- struct MsgText
- {
- public string Text;
- public MsgText(BinaryReader br)
- {
- Text = br.ReadString();
- }
- }
- struct MsgFile
- {
- public string Name;
- public int FileLen;
- public byte[] File;
- public MsgFile(BinaryReader br)
- {
- Name = br.ReadString();
- FileLen = br.ReadInt32();
- File = br.ReadBytes(FileLen);
- }
- public void Write(Stream s)
- {
- var bw = new BinaryWriter(s);
- bw.Write((byte)MsgType.File);
- bw.Write(Name);
- bw.Write(FileLen);
- bw.Write(File);
- }
- }
- }
- }
Add Comment
Please, Sign In to add comment