TCP比较繁琐的就是三次握手定理,每次再发送数据前都要先建立连接确认。

 



using System;  
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.IO;

namespace TCP
{
public partial class Form1 : Form
{
public Form1()
{

InitializeComponent();
}
//启动服务端
TcpListener listener;
delegate void SetTextCallBack(string text);
private void button1_Click(object sender, EventArgs e)
{
//try
//{
label2.Text = "服务端已开启..";
button1.Enabled = false;
listener = new TcpListener(IPAddress.Any, 3000);
listener.Start();
Thread th = new Thread(new ThreadStart(ReceiveMsg));
th.Start();
th.IsBackground = true;
//}
//catch (Exception ex)
//{
// Console.WriteLine(ex.Message);
//}

}

public void ReceiveMsg()
{

while (true)
{
TcpClient client = listener.AcceptTcpClient();
byte[] buffer = new byte[9899];
NetworkStream stream = client.GetStream();
int len = stream.Read(buffer, 0, buffer.Length);
string msg = Encoding.Unicode.GetString(buffer, 0, len);
SetText(msg);


stream.Flush();
stream.Close();
client.Close();

}


}
public void SetText(string text)
{
try
{
if (this.richTextBox1.InvokeRequired)
{
SetTextCallBack d = new SetTextCallBack(SetText);
this.Invoke(d, new object[] { text });
}
else
{

this.richTextBox1.Text += DateTime.Now.ToString() + "\n" + text + "\n";
}

}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}

private void button2_Click(object sender, EventArgs e)
{
try
{
//FileStream fs = new FileStream(textBox2.Text,FileMode.OpenOrCreate,FileAccess.Read);
//byte[] buff=new byte[fs.Length];
//int rea = fs.Read(buff,0,buff.Length);
string ip = textBox1.Text;
string msg = richTextBox2.Text;
//msg = string.Format("{0}:{1}:{2}:{3}:{4}:{5}",1,DateTime.Now.Ticks,"007","www","32",msg);
TcpClient client = new TcpClient();
client.Connect(IPAddress.Parse(ip), 3000);
NetworkStream stream = client.GetStream();
byte[] buffer = Encoding.Unicode.GetBytes(msg);
stream.Write(buffer, 0, buffer.Length);
//stream.Write(buff,0,rea);
//label6.Text = "文件发送成功!";
MessageBox.Show("发送成功!");
}
catch (Exception ex)
{
MessageBox.Show("服务端未开启!");
}
}

private void button2_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
this.button2_Click(sender,e);
}
}
//存放的目录
// private void button4_Click(object sender, EventArgs e)
// {
// FolderBrowserDialog fbd = new FolderBrowserDialog();
// if(fbd.ShowDialog()==DialogResult.OK)
// {
// textBox3.Text = fbd.SelectedPath;
// }
// }
//发送的文件
/// private void button3_Click(object sender, EventArgs e)
//{
// OpenFileDialog ofd = new OpenFileDialog();
// if(ofd.ShowDialog()==DialogResult.OK)
// {
// textBox2.Text = ofd.FileName;
// }
// }
//文件发送
//private void button5_Click(object sender, EventArgs e)
//{
// FileStream fs = new FileStream(textBox2.Text,FileMode.Open,FileAccess.Read);
// byte[] buffer = new byte[fs.Length];
// int rea=fs.Read(buffer,0,buffer.Length);
// TcpClient client = new TcpClient();
// string ip = textBox1.Text;
// client.Connect(IPAddress.Parse(ip),3000);
// NetworkStream ns = client.GetStream();
// ns.Write(buffer,0,rea);
// MessageBox.Show("文件发送成功!");
// fs.Flush();
// ns.Flush();
// fs.Close();
// ns.Close();
//} }
}