C# 在端口服务器端运行网络应用程序时出现错误如何解决?

C# 在端口服务器端运行网络应用程序时出现错误如何解决?,c#,.net,visual-studio,visual-studio-2008,network-programming,C#,.net,Visual Studio,Visual Studio 2008,Network Programming,如果我运行服务器应用程序。发生异常:在Dinle.Start()上 System.Net.SocketException-每个套接字地址(协议/网络地址/端口)通常只允许使用一次 如何解决此错误 Server.cs 使用系统; 使用System.Collections.Generic; 使用系统组件模型; 使用系统数据; 使用系统图; 使用System.Linq; 使用系统文本; 使用System.Windows.Forms; 使用System.IO; Net系统; 使用System.Net.

如果我运行服务器应用程序。发生异常:在Dinle.Start()上

System.Net.SocketException-每个套接字地址(协议/网络地址/端口)通常只允许使用一次

如何解决此错误

Server.cs

使用系统;
使用System.Collections.Generic;
使用系统组件模型;
使用系统数据;
使用系统图;
使用System.Linq;
使用系统文本;
使用System.Windows.Forms;
使用System.IO;
Net系统;
使用System.Net.Sockets;
使用系统线程;
命名空间服务器
{
公共部分类服务器:表单
{
螺纹假名;
公共服务器()
{
初始化组件();
尝试
{
kanal=新线程(新线程开始(Dinle));
kanal.Start();
kanal.Priority=ThreadPriority.Normal;
Text=“Kanlaıalıştı”;
}
捕获(例外情况除外)
{
Text=“kanalçalışmadı”;
Show(“hata:+ex.ToString());
kanal.Abort();
投掷;
}
}
私有void服务器加载(对象发送方、事件参数)
{
丁勒();
}
私有无效btn\u侦听\u单击(对象发送方,事件参数e)
{
丁勒();
}
void Dinle()
{
//IPAddress localAddr=IPAddress.Parse(“localhost”);
//TcpListener服务器=新的TcpListener(端口);
//服务器=新的TcpListener(localAddr,端口);
//TcpListener-Dinle=新的TcpListener(localAddr,51124);
TcpListener-Dinle=新的TcpListener(51124);
尝试
{
while(true)
{
Dinle.Start();发生异常。
Socket Baglanti=Dinle.AcceptSocket();
如果(!Baglanti.Connected)
{
MessageBox.Show(“Baglanti Yok”);
}
其他的
{
TcpClient TcpClient=Dinle.AcceptTcpClient();
如果(tcpClient.ReceiveBufferSize>0)
{
字节[]Dizi=新字节[250000];
Baglanti.Receive(Dizi,Dizi.Length,0);
蛋黄;
saveFileDialog1.Title=“Dosyayi kaydet”;
saveFileDialog1.ShowDialog();
Yol=saveFileDialog1.FileName;
FileStream Dosya=newfilestream(Yol,FileMode.Create);
写(Dizi,0,Dizi.Length-20);
Dosya.Close();
列表框1.Items.Add(“dosya Indiridi”);
listBox1.Items.Add(“Dosya Boyutu=“+Dizi.Length.ToString());
列表框1.Items.Add(“İndirime Tarihi=“+DateTime.Now”);
listBox1.Items.Add(“-------------------------------------”);
}
}
}
}
捕获(例外情况除外)
{
Show(“hata:+ex.ToString());
}
}
}
}

正在多次调用TcpListener.Start

1-在服务器构造函数中启动线程时调用
2-通过服务器加载事件处理程序中对Dinle的调用
3-再次单击btn\u Listen\u click事件处理程序中的按钮

我并不声称我完全掌握了你想要做的事情,但我认为这可以简化

首先,您应该创建并启动侦听器一次,比如说代码何时开始运行。之后,您可以进入一个调用AcceptTcpClient的循环,以接受连接并处理通信

您似乎还混合了套接字和TcpClient,这是不需要的。下面是使用TcpListener和TcpClient的基本示例


@Phsika,你看过我链接的页面上的样本了吗?该示例为构建代码提供了一个合理的起点。
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.IO;
using System.Net;
using System.Net.Sockets;
using System.Threading;

namespace Server
{
    public partial class Server : Form
    {
        Thread kanal;
        public Server()
        {
            InitializeComponent();

            try
            {
                kanal = new Thread(new ThreadStart(Dinle));
                kanal.Start();
                kanal.Priority = ThreadPriority.Normal;
                this.Text = "Kanla Çalıştı";
            }
            catch (Exception ex)
            {
                this.Text = "kanal çalışmadı";
                MessageBox.Show("hata:" + ex.ToString());
                kanal.Abort();
                throw;
            }
        }

        private void Server_Load(object sender, EventArgs e)
        {
            Dinle();
        }
        private void btn_Listen_Click(object sender, EventArgs e)
        {

            Dinle();
        }

        void Dinle()
        {
          //  IPAddress localAddr = IPAddress.Parse("localhost");
            // TcpListener server = new TcpListener(port);
           // server = new TcpListener(localAddr, port);
            //TcpListener Dinle = new TcpListener(localAddr,51124);
            TcpListener Dinle = new TcpListener(51124);
            try
            {

                while (true)
                {
                   

Dinle.Start();

Exception is occured. Socket Baglanti = Dinle.AcceptSocket(); if (!Baglanti.Connected) { MessageBox.Show("Baglanti Yok"); } else { TcpClient tcpClient = Dinle.AcceptTcpClient(); if (tcpClient.ReceiveBufferSize > 0) { byte[] Dizi = new byte[250000]; Baglanti.Receive(Dizi, Dizi.Length, 0); string Yol; saveFileDialog1.Title = "Dosyayi kaydet"; saveFileDialog1.ShowDialog(); Yol = saveFileDialog1.FileName; FileStream Dosya = new FileStream(Yol, FileMode.Create); Dosya.Write(Dizi, 0, Dizi.Length - 20); Dosya.Close(); listBox1.Items.Add("dosya indirildi"); listBox1.Items.Add("Dosya Boyutu=" + Dizi.Length.ToString()); listBox1.Items.Add("İndirilme Tarihi=" + DateTime.Now); listBox1.Items.Add("--------------------------------"); } } } } catch (Exception ex) { MessageBox.Show("hata:" + ex.ToString()); } } } }