C# tcp可用段创建

设置控件(下面的是richTextBox)

连接按钮事件

Socket socket; // 全局的socket对象,套接字,实现tcp通信的类

private void button1_Click(object sender, EventArgs e)
{
if (button1.Text == "连接")//连接功能
{
    try
    {
        //构造函数参数1是socket类型,传递的数据是数据流类型
        // 参数2是使用的协议,ProtocolType.Tcp tcp协议
        //1 创建基于流的套接字对象
        socket = new Socket(SocketType.Stream,ProtocolType.Tcp);

        //2 连接到指定的tcp远程服务器
        //Connect 连接,参数1是远程ip地址,
        //参数2 是端口号
        socket.Connect(this.textBox1.Text,int.Parse(this.textBox2.Text));

        //修改按钮的标题
        button1.Text = "断开";
        textBox1.Enabled = false; //输入框不可用
        textBox2.Enabled = false;// 输入框不可用

        //4接受数据 封装一个方法接受数据
        startReceive();
    }
    catch (Exception)
    {

        MessageBox.Show("连接失败");
    }
}
else
{
    //按钮的标题是断开的时候
    //断开连接
     socket.Close();

    //设置状态
    button1.Text = "连接";
    textBox1.Enabled = true; //输入框可用
    textBox2.Enabled = true;// 输入框可用
}
//MessageBox.Show(socket.Connected + ""); //连接状态
}
//接受数据方法
public void startReceive()
{
    //开启一个分线程去接收
    // Thread 分线程
    Thread t = new Thread(() =>
    {
        // 重复的接收数据,直到数据被接收完了
        while (true)
        {
            try
            {
                byte[] bs = new byte[50]; //字节数组,
                int count = socket.Receive(bs);//读取socket返回的数据 一次从返回数据接收指定长度的数据
                                               // 如果socket数据接收完了或者断开的连接,会接受到0字节大小的数据,count就等于0, 
                if (count == 0)
                {
                    BeginInvoke(new Action(() =>
                    {
                        button1.Text = "连接";
                        textBox1.Enabled = true; //输入框可用
                        textBox2.Enabled = true;// 输入框可用
                    }));

                    //断开连接 把断开连接字符串写入富文本框中
                    WriteRich("连接已经断开");
                    break;
                }
                // 把接受到数据写入富文本框中
                // bs 就是接受过来的数据
                WriteRich(Encoding.UTF8.GetString(bs, 0, count));
            }
            catch (Exception)
            {
                WriteRich("连接已经断开");
                break;
            } 
        }
    });
  t.Start(); // 开启分线程
}
void WriteRich(string s)
{
    BeginInvoke(new Action(()=>{
        richTextBox1.AppendText(s + "\n");
        richTextBox1.SelectionStart = richTextBox1.Text.Length;//把光标定到文件尾部。
        richTextBox1.ScrollToCaret(); // 控件滚动光标处
    }));
}
//发送按钮



发送按钮:

private void button2_Click(object sender, EventArgs e)
{
    //3 发送数据(发送的是一个字节数组)
    //Send() 参数1字节数组
    byte[] bs = Encoding.UTF8.GetBytes(textBox3.Text);//把字符串按照默认编码方式进行编码
    socket.Send(bs);
}

总结:

1 创建基于流的套接字对象

socket = new Socket(SocketType.Stream,ProtocolType.Tcp);

2 连接到指定的tcp远程服务器

socket.Connect(this.textBox1.Text,int.Parse(this.textBox2.Text));

3 发送数据(发送的是一个字节数组)

byte[] bs = Encoding.UTF8.GetBytes(textBox3.Text);
  socket.Send(bs);

4 接受数据

byte[] bs = new byte[50]; //字节数组,
    socket.Receive(bs);

string s = Encoding.UTF8.GetString(bs, 0, count) 把数据转成字符串

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值