Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

C# - Server


Rekomendowane odpowiedzi

Opublikowano

Witam.

Mam problem, chcę zrobić server w c#,

mam kod, ale jak uruchamiam to program

się zawiesza.

Kod:

 

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;

namespace nameproject
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        private void Serwer_Start(String ip1)
        {
            IPAddress ipAdress = IPAddress.Parse(ip1);
            TcpListener myList = new TcpListener(ipAdress, 8000);

            listBox1.Items.Add("Server running - Port: 8000");
            listBox1.Items.Add("Local end point:" + myList.LocalEndpoint);
            listBox1.Items.Add("Waiting for connections...");

            myList.Start();

            Socket s = myList.AcceptSocket();

            listBox1.Items.Add("Connection accepted from " + s.RemoteEndPoint);

            byte[] b = new byte[100];
            int k = s.Receive(;

            listBox1.Items.Add("Recieved...");

            for (int i=0;i<k;i++)
            {
                listBox1.Items.Add(Convert.ToChar(b[i]));
            }

            ASCIIEncoding asen = new ASCIIEncoding();
            s.Send(asen.GetBytes("Automatic message:"
                + "String received by server!"));

            s.Close();
            myList.Stop();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Serwer_Start(textBox1.Text);
        }
    }
}
Opublikowano

#ref

 

Lel godz na forum są pokręcone bo

napisane jest, że ref

13:49

a zrobiłem prawie o 15 lel :P

 

===============================

 

Hmm serwer niby działa bo jak ten kod zrobię

na console to na consoli działa, ale jak wystartuje

w form to się zawiesza i jak uruchomię w consoli

z tym samym portem to error bo niby ten port jest

już używany a w form jest lag :( wie ktoś jak to naprawić ?

 

================================================

 

Heh serwer działa tylko program się zawiesza wie ktoś jak to naprawić ?

Opublikowano
 myList.Server.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);

Dodaj ten kod po inicjalizacji tcp listenera, powinno pomoc na blad i uzywanym adresie/porcie, powod tego bledu nie jest mi do konca znany w tym przypadku, ale najczesciej chodzi o to ze server socket twierdzi, ze jest bardzo zajety i nie moze obsluzyc kolejnych polaczen bez zmiany adresu. Poczytaj o wielowatkowosci, program sie zawiesza poniewaz robisz wszystko na glownym watku UI. Winformsy to program jak program, idzie linia po linii. Jak napiszesz ze tcp listener ma zaakceptowac polaczenie, to bedzie tak czekal az to sie stanie i caly program stanie sie nieresponswny(mam nadzieje ze to sie pisze razem :D).  W ten sposob mozesz wsadzic kod oczekujacy na nowe polaczenia w oddzielny watek:

 private void Serwer_Start(String ip1)
        {
            IPAddress ipAdress = IPAddress.Parse(ip1);
            TcpListener myList = new TcpListener(ipAdress, 8000);
            myList.Server.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);

            listBox1.Items.Add("Server running - Port: 8000");
            listBox1.Items.Add("Local end point:" + myList.LocalEndpoint);
            listBox1.Items.Add("Waiting for connections...");

            new Thread(() => {

               myList.Start();

               Socket s = myList.AcceptSocket();

               listBox1.Items.Add("Connection accepted from " + s.RemoteEndPoint);

               byte[] b = new byte[100];
               int k = s.Receive(;

               listBox1.Items.Add("Recieved...");

               for (int i=0;i<k;i++)
               {
                   listBox1.Items.Add(Convert.ToChar(b[i]));
               }

               ASCIIEncoding asen = new ASCIIEncoding();
               s.Send(asen.GetBytes("Automatic message:"
                   + "String received by server!"));

               s.Close();
               myList.Stop();
            }).Start();
        }

Nie mam dostepu do visual studio wiec nie moge tego sprawdzic jak cos

Opublikowano

A nie zadziała timer?? albo coś co sprawdza czy coś zostało zmienione ?? Nie wiem jak to w C# działa ale pisze sobie w VB teraz głównie launcher i dość rozbudowany to odświeżam wartości jakimś timerem albo sprawdzam czy wartość nie została zmieniona.

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...