zoukankan      html  css  js  c++  java
  • C#TCPClient应用一个简单的消息发送和接收

    TcpSend窗口用于发送消息,另外写一个用于接收消息的应用程序,消息接受到以后,必须要关闭接收消息的窗口,才能在接收新的消息,不知道怎么能解决这个问题。

    源代码:

    发送消息的窗口代码

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


    namespace TCPSocket
    {
        public partial class FrmTcpSend : Form
        {
            public FrmTcpSend()
            {
                InitializeComponent();
            }

            private void buttonSendFile_Click(object sender, EventArgs e)
            {
               // TcpClient tcpClient = new TcpClient(textBoxHostName.Text, Int32.Parse(textBoxPort.Text));
                TcpClient tcpClient = new TcpClient();
                tcpClient.Connect(IPAddress.Parse(textBoxHostName.Text), Int32.Parse(textBoxPort.Text));

                NetworkStream ns = tcpClient.GetStream();

                FileStream fs = File.Open("..\\..\\FrmTcpSend.cs", FileMode.Open);

                int data = fs.ReadByte();

                while (data != -1)
                {
                    ns.WriteByte((byte)data);
                    data = fs.ReadByte();
                }

                fs.Close();
                ns.Close();
                tcpClient.Close();

            }

            private void buttonSendMessage_Click(object sender, EventArgs e)
            {
                TcpClient tcpClient = new TcpClient();
                tcpClient.Connect(IPAddress.Parse(textBoxHostName.Text), Int32.Parse(textBoxPort.Text));

                NetworkStream ns = tcpClient.GetStream();


                if (ns.CanWrite)
                {
                    Byte[] sendBytes = Encoding.UTF8.GetBytes(textBoxMessage.Text);
                    ns.Write(sendBytes, 0, sendBytes.Length);
                }
                else
                {
                    MessageBox.Show("不能写入数据流", "终止", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                    //Console.WriteLine("You cannot write data to this stream.");
                    tcpClient.Close();

                    // Closing the tcpClient instance does not close the network stream.
                    ns.Close();
                    return;
                }


                ns.Close();
                tcpClient.Close();

            }
        }
    }

    接收消息的窗口代码

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

    namespace TcpReceive
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();

                //Thread thread = new Thread(new ThreadStart(Listen));

                Thread thread = new Thread(new ThreadStart(SocketListen));

                thread.Start();

                IPAddress ipAddress = IPAddress.Any; //IPAddress.Parse("172.16.102.11");


                this.Text = ipAddress.ToString()+"正在监听...";

            }

            protected delegate void UpdateDisplayDelegate(string text);


            public void Listen()
            {
                IPAddress ipAddress = IPAddress.Any; //IPAddress.Parse("172.16.102.11");


              
               
                TcpListener tcpListener = new TcpListener(ipAddress,9999);
                tcpListener.Start();

                TcpClient tcpClient = tcpListener.AcceptTcpClient();

              
                NetworkStream ns = tcpClient.GetStream();

                StreamReader sr = new StreamReader(ns);

                string result = sr.ReadToEnd();

                Invoke(new UpdateDisplayDelegate(UpdateDisplay), new object[] { result });

                tcpClient.Close();
                tcpListener.Stop();
            }

            public void SocketListen()
            {
                Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

                listener.Bind(new IPEndPoint(IPAddress.Any, 9999));

                listener.Listen(0);

                Socket socket = listener.Accept();
                Stream netStream = new NetworkStream(socket);
                StreamReader reader = new StreamReader(netStream);

                string result = reader.ReadToEnd();
                Invoke(new UpdateDisplayDelegate(UpdateDisplay), new object[] { result });

                socket.Close();
                listener.Close();


            }

            public void UpdateDisplay(string text)
            {
                richTextBox1.Text = text;
            }


        }
    }

    分享到: 更多
  • 相关阅读:
    java 支付宝即时到帐提交订单dome
    C#字符串string的常用使用方法(转载)
    UltraEdit 回车符替换空格
    java 七牛上传图片到服务器(采用的html5 压缩 传输base64方式)
    c# 多播委托
    c# 泛型委托
    c# 求数组的最大值
    c# 匿名函数和lamda表达式语法
    匿名函数和lamda表达式
    导出Excel之Epplus使用教程4(其他设置)
  • 原文地址:https://www.cnblogs.com/tiasys/p/1609286.html
Copyright © 2011-2022 走看看