私は学校のプロジェクトで何かしています。サーバー(リスナー)とクライアントの両方の通信を可能にするC#アプリケーションを作成する必要があります。問題は、私はこれをやったことがありますが、それはまったく動作しません、それは修正するにはあまりにも多くのエラーをスローし、間違いなくひどくコード化されている、私は前にこの厄介な何かをしたことはありません。サーバーとクライアントの間の通信C#
私はまた、多くのクライアントが同時にサーバにアクセスできるようにしたいので、アクティブな人のクライアントリストです。私は1つの例をオンラインで見ましたが、達成しようとしていたタスクにとっては複雑すぎました。私は、クライアントとサーバーの両方に簡単なテキスト通信を行い、必要なときにいつでも情報を送信したいだけです。私はそれが情報が送信されるのを待っているwhileループで立ち往生したくないです&他のもの。
申し訳ありませんが、私はそれをひどく説明しました。ありがとう。
編集
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Threading;
using System.Net;
using System.Net.Sockets;
namespace CentralHubGUI
{
class chCon
{
static TcpClient clientCon;
static NetworkStream stream;
public static bool currentlyConnected;
static string buffer;
string ip = "";
int port = 0;
Thread thread1 = new Thread(receiveData_Stage1);
//Thread thread2 = new Thread();
//Thread thread3 = new Thread();
public chCon(string ipAddress, int portNumber)
{
ip = ipAddress;
port = portNumber;
connectToConsole();
}
public void connectToConsole()//mitigates the connection
{
if (ip.Trim() == "")
ip = "127.0.0.1";
if (port == 0)
port = 2647;
try
{
clientCon = new TcpClient(ip, port);
stream = clientCon.GetStream();
sendData("#101" + (char)13); //first bit of data is sent on accepted client
Thread retrieveData = new Thread(receiveData_Stage1);
retrieveData.Start();
currentlyConnected = true;
thread1.Start(); //starting to read the server for information
}
catch(Exception e) // if the connection being naughty ;)
{
currentlyConnected = false;
MessageBox.Show("Exception caught:\n" + e);
}
}
public void disconnectFromConsole()
{
try
{
if (clientCon.Connected || clientCon.Connected == null)
{
thread1.Abort();
byte[] msg = System.Text.Encoding.ASCII.GetBytes("#103");
stream.Write(msg, 0, msg.Length);
stream.Close();
clientCon.Close();
currentlyConnected = false;
}
else
{
MessageBox.Show("Cannot disconnect from a connection that has not started.");
}
}
catch (Exception ex)
{
MessageBox.Show("Error thrown during disconnection - UNKNOWN");
}
}
internal void sendData(string data)//sends data to the server
{
Byte[] dataConv = System.Text.Encoding.ASCII.GetBytes(data);
stream.Write(dataConv, 0, dataConv.Length);
}
public static void receiveData_Stage1() //builds a buffer through a loop
{
while (true)
{
Byte[] response = new Byte[256];
string responseData = String.Empty;
// Read the first batch of the TcpServer response bytes.
Int32 bytes = stream.Read(response, 0, response.Length);
responseData = System.Text.Encoding.ASCII.GetString(response);
if(responseData.Trim() != "")
buffer = buffer + responseData;
}
}
public static string receiveData_Stage2() //requests the buffer through a return value string
{
string bufferTemp;
bufferTemp = buffer;
buffer = string.Empty;
return bufferTemp;
}
public void closeConnection()
{
stream.Close();
clientCon.Close();
thread1.Abort();
}
}
/*
while (true)
{
if (Program.currentlyConnected == true)
{
Thread.Sleep(100);
buffer = Program.receiveData_Stage2();
if (buffer != "")
richTxtBoxConsole.AppendText(buffer + "\n");
}
else
{
guiConsoleWriteLine("Connection is not active.");
break;
}
}
*/
}
にいくつかの良い記事があります。投稿した内容を投稿してください。そうでなければ広すぎる質問です。 – Divisadero
この質問には深刻な作業が必要です。あなたが試したこととあなたが遭遇したエラー/問題が解決できないことを正確に示してください。 – nodots
** A)**なぜデータを読み取るのに2つのスレッドを使用していますか?これは深刻な問題を引き起こす可能性があります'Thread1'または' retrieveData'を取り除いてください。 ** B)** '' BooleanConnection' == null'をチェックすることは、 '' Boolean''値がnullであることができないので役に立たない。 –