пытаюсь создать клиентское приложение клиентского сервера на C# и java-сервере с помощью низкоуровневого сокета: Процесс выглядит следующим образом: Зарядный интерфейс клиента, который они нажимают «Вход» или зарегистрировать Я открываю мой сокет. Я отправляю запрос на свой сервер, и я запускаю поток для постоянного чтения данных, отправленных сервером: все это хорошо работает: , за исключением того, что я должен сохранить свой сокет для последующих вызовов, и я знаю, как сделать это: SOS Вот фрагмент кода: /// т называется сервером Первый вызовиспользовать один экземпляр сокета для всех вызовов
public void Inscritpionidentification(string Commande,string UserID,string Password, string Nom,string prenom,string Email)
{
IPEndPoint ipEnd = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 2007);
ClientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
ClientSocket.Connect(ipEnd);
if(ClientSocket.Connected)
{
//SendMsg(GetSequence()+NickName);
//Connect.Enabled=false;
if (Commande.Equals("/Identification"))
{
SendMsg("Identification");
}
if (Commande.Equals("/Account/Create"))
{
SendMsg("Inscription"));
}
}
}
catch (SocketException E)
{
MsgBox("Connection" + E.Message);
}
try
{
DataReceived = new Thread(new ThreadStart(CheckData)); // Read constantly gives the server sent
DataReceived.Start();
}
catch (Exception E)
{
MsgBox("Démarrage Thread" + E.Message);
}
while (UTF8Content==null) {
}
// Traitement
}
void SendMsg(string message)
{
byte[] msg = System.Text.Encoding.UTF8.GetBytes(message);
int DtSent = ClientSocket.Send(msg, msg.Length, SocketFlags.None);
if (DtSent == 0)
{
MsgBox("aucune donnèe n'as ete envoyé");
}
}
//// My thread
private void CheckData()
{
try
{
while(true)
{
if(ClientSocket.Connected)
{
if(ClientSocket.Poll(10,SelectMode.SelectRead) && ClientSocket.Available==0)
{
//La connexion a été clôturée par le serveur ou bien un problème
//réseau est apparu
MsgBox("La connexion au serveur est interrompue.Reessayez!!");
Thread.CurrentThread.Abort();
}
//Si la socket a des données à lire
if(ClientSocket.Available>0)
{
string messageReceived=null;
while(ClientSocket.Available>0)
{
try
{
byte[] msg=new Byte[ClientSocket.Available];
//Réception des données
ClientSocket.Receive(msg,0,ClientSocket.Available,SocketFlags.None);
messageReceived=System.Text.Encoding.UTF8.GetString(msg).Trim();
//On concatène les données reçues(max 4ko) dans une variable de la classe
UTF8Content+=messageReceived;
}
catch(SocketException E)
{
}
}
}
}
//On temporise pendant 10 millisecondes, ceci pour éviter
//que le micro processeur s'emballe
Thread.Sleep(10);
}
}
catch
{
//Ce thread étant susceptible d'être arrêté à tout moment
//on catch l'exception afin de ne pas afficher un message à l'utilisateur
Thread.ResetAbort();
}
}
// Я вызываю эту функцию после того, как зарегистрировался ..par против этой проблемы, я должен использовать тот же сокет, который я создаю в функции IdentificationInscription, которая, по-видимому, невозможна, даже если поток является toujour DataRecevied в исполнении ... любая помощь будет оценена спасибо
public void ModifCompte(string UserID, string Password, string Nom, string prenom, string Email) {
SendMsg("Update"); // *Error Socket has null*
while (UTF8Content == null)
{
}
//My treatment
}
большое спасибо, что это решение, наконец, dieal –