C# 关于tcp连接的 做了两个窗口,以下是代码和示例图片,客户端的文字没有传输过去

图片说明
图片说明
在服务端点击listen后,客户端输入文字,因该要通过tcp过去,可是服务端没有显示,以下是代码
//服务端//
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.Net;
using System.Net.Sockets;
using System.Threading;
using System.Collections;

namespace TCPMyserver
{
public partial class MyServer : Form
{
delegate void SetTextCallBack(string text);
private TcpClient client;
private TcpListener server;
NetworkStream stream;
struct IpAndPort
{
public string Ip;
public string Port;
}

    public MyServer()
    {
        InitializeComponent();

    }

    private void Listen_Click(object sender, EventArgs e)
    {
        Listen.Enabled = false;
        if (Serverport.Text.Trim() == string.Empty)
        {
            return;
        }
        if (ServerIP.Text.Trim() == string.Empty)
        {
            return;
        }
        Thread thread = new Thread(Receiveandlisten);
        IpAndPort ipHePort = new IpAndPort
        {
            Ip = ServerIP.Text,
            Port = Serverport.Text
        };


        thread.Start((object)ipHePort);

    }
    private void Receiveandlisten(object ipandport)
    {
        IpAndPort ipAndPort = (IpAndPort)ipandport;
        IPAddress iP = IPAddress.Parse(ipAndPort.Ip);
        server = new TcpListener(iP, int.Parse(ipAndPort.Port));
        server.Start();
       while(true)
        {

            client = server.AcceptTcpClient();
           int bufferSize = client.ReceiveBufferSize;
            byte [] buffer = new byte[bufferSize];
            stream = client.GetStream();
            stream.Read(buffer, 0, bufferSize);
            String showdata = Encoding.Default.GetString(buffer).Trim('\0');
            SetText(showdata);
            stream.Flush();
            stream.Close();
            client.Close();


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

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

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

}

//客户端//
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.Net;
using System.Net.Sockets;
using System.Threading;

namespace MyClient
{
public partial class Form1 : Form
{

    string sendString = null;//要发送的字符串
    byte[] sendData = null;//要发送的字节数组
    TcpClient client = null;//TcpClient实例
    NetworkStream stream = null;//网络流
    public IPAddress remoteIP = IPAddress.Parse("127.0.0.1");//远程主机IP
    public int remotePort = 88;//远程主机端口

    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Thread thread = new Thread(send);

    }
    private void send()
    {
        while (true)
        {
            sendString = Txt_send.Text;
            sendData = Encoding.Default.GetBytes(sendString);
            client = new TcpClient();
            try
            {
                client.Connect(remoteIP, remotePort);

            }

                catch (System.Exception ex)
            {

                MessageBox.Show("连接失败,服务器无响应");
                return;
            }
            stream = client.GetStream();
            stream.Write(sendData, 0, sendData.Length);



        }


    }
}

}

端口设置的话建议不要设置88,设置成一些大些的数字,说不定者88可能被系统服务占用。
至于其他的,tcp通信用c#没做过。用qt倒是会。

先检查,客户端和服务器的socket连接是否成功,然后注意端口,c#开发socket可以是使用supersoket框架,应该比自己写的要稳定。

客户端有问题,客户端先连接服务端,连接成功之后再进行发送
客户端练级服务器代码
private void ConnectYuyin()
{
try
{
serverIP = IPAddress.Parse(Commands.YYIP);
serverFullAddr = new IPEndPoint(serverIP, Commands.YYPort);//设置IP,端口

sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sock.BeginConnect(serverFullAddr, new AsyncCallback(ConnectCallback), sock);
connectDone.WaitOne();

            //定义一个套字节监听  包含3个参数(IP4寻址协议,流式连接,TCP协议)
            sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);


            //这里客户端套接字连接到网络节点(服务端)用的方法是Connect 而不是Bind
            sock.Connect(serverFullAddr);
            //timerSend.Enabled = true;
            //timerSend.Start();
            btnConnectYY.Enabled = false;
            IsCZConnect = true;
            ////创建一个线程 用于监听服务端发来的消息

        }
        catch (Exception ee)
        {
            IsCZConnect = false;
            richMsg.BeginInvoke(new ShowVehicleCallback(UpdateRichMsg), "连接服务器失败。。。请仔细检查服务器是否开启" + ee);
        }
    }
            消息发送
            public void Send()
    {
        try
        {
            // Convert the string data to byte data using ASCII encoding.     
            byte[] byteData = Encoding.Default.GetBytes(data);
            // Begin sending the data to the remote device.     
            client.BeginSend(byteData, 0, byteData.Length, 0, new AsyncCallback(SendTurnCallback), client);

        }
        catch (Exception ex)
        {
            richMsg.BeginInvoke(new ShowVehicleCallback(UpdateRichMsg), ex.Message);
        }
    }

            代码是从我项目粘过来的,仅供参考。

已经解决了谢谢大家,以后有时间会发出来