Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
No results found
Show changes
Showing
with 175 additions and 13 deletions
File added
File added
File added
File added
File added
File added
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ServeurUdp
{
public enum Commande {
POST, GET, HELP, QUIT, STOPSERVEUR, SUBSCRIBE, SUBSCRIBEv2, UNSUBSCRIBE
};
public enum CommandeType { REQUETE, REPONSE };
class ChatMessage
{
public const int bufferSize = 1500;
public const int pseudoSize = 20;
public const int messageSize = bufferSize - (pseudoSize+2);
public Commande commande; // commande
public CommandeType commandeType; // type (Requête/Réponse)
public String pseudo;
public int dataSize; // taille de la donnée
public String data; // données de la commande
public ChatMessage(Commande commande, CommandeType type, String data)
{
this.commande = commande;
this.commandeType = type;
this.dataSize = data.Length;
this.data = data;
}
public ChatMessage(Commande commande, CommandeType type, String pseudo, String data)
{
this.commande = commande;
this.commandeType = type;
this.pseudo = pseudo;
this.dataSize = data.Length;
this.data = data;
}
public ChatMessage(byte[] buffer)
{
this.commande = (Commande)buffer[0];
this.commandeType = (CommandeType)buffer[1];
this.pseudo = System.Text.Encoding.ASCII.GetString(buffer, 2, pseudoSize).TrimEnd('\0');
this.data = System.Text.Encoding.ASCII.GetString(buffer, pseudoSize+2, messageSize).TrimEnd('\0');
this.dataSize = data.Length;
}
public byte[] GetBytes()
{
byte[] Bytes = new byte[bufferSize];
Bytes[0] = (Byte)this.commande;
Bytes[1] = (Byte)this.commandeType;
Encoding.ASCII.GetBytes(pseudo, 0, pseudo.Length, Bytes, 2);
Encoding.ASCII.GetBytes(data, 0, data.Length, Bytes, 22);
return Bytes;
}
/**************
* METHODE AJOUTEE : retourne la commande.
* ********************/
public Commande GetCommande()
{
return this.commande;
}
public static byte[] GetBytes(Commande commande, CommandeType type, String pseudo,String data)
{
ChatMessage chatCommande = new ChatMessage(commande, type, pseudo,data);
return chatCommande.GetBytes();
}
public override string ToString()
{
return "[" + commande + "," + commandeType + ",\"" + pseudo + "\"," + dataSize + ",\"" + data + "\"]";
}
}
}
......@@ -4,7 +4,7 @@ using System.Net.Sockets;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
namespace ServeurUdp
{
......@@ -12,6 +12,7 @@ namespace ServeurUdp
{
static void Main(string[] args)
{
try
{
......@@ -23,27 +24,86 @@ namespace ServeurUdp
SocketType.Dgram,
ProtocolType.Udp);
string clientIP = "130.79.81.202";
int clientPort = 48532;
// Liaison de la socket au point de communication
serverSocket.Bind(new IPEndPoint(IPAddress.Any, 11111));
//************************************************************** Communications
Console.WriteLine("Attente d'une nouveau message...");
// Reception message client
EndPoint clientEP = new IPEndPoint(IPAddress.Any, 0);
byte[] buffer = new byte[80];
int nBytes = serverSocket.ReceiveFrom(buffer, buffer.Length, SocketFlags.None, ref clientEP);
EndPoint clientEP = new IPEndPoint(/*IPAdress.Any*/IPAddress.Parse(clientIP), clientPort);
/*byte[] buffer = new byte[ChatMessage.bufferSize];
int nBytes = serverSocket.ReceiveFrom(buffer, buffer.Length, SocketFlags.None, ref clientEP);*/
ArrayList userSub = new ArrayList();
String message = "";
ChatMessage chatMess = null, cmReponse = null;
do
{
byte[] buffer = new byte[ChatMessage.bufferSize];
int nBytes = serverSocket.ReceiveFrom(buffer, buffer.Length, SocketFlags.None, ref clientEP);
// Decodage du buffer de bytes en ASCII vers un string
chatMess = new ChatMessage(buffer);
Commande commandeCm = chatMess.GetCommande();
switch(commandeCm)
{
case Commande.POST:
message += chatMess+"\n";
Console.WriteLine("CM recu : " + chatMess);
cmReponse = chatMess;
cmReponse.commandeType = CommandeType.REPONSE;
foreach (EndPoint ep in userSub)
{
buffer = cmReponse.GetBytes();
Console.WriteLine("CM envoyé : " + cmReponse);
nBytes = serverSocket.SendTo(buffer, 0, buffer.Length, SocketFlags.None, clientEP);
}
break;
case Commande.GET:
ChatMessage cmConcac = new ChatMessage(Commande.POST, CommandeType.REQUETE, "Maiko", message);
cmReponse = cmConcac;
break;
case Commande.STOPSERVEUR:
Console.WriteLine("CM recu : " + chatMess);
cmReponse = chatMess;
cmReponse.commandeType = CommandeType.REPONSE;
break;
case Commande.SUBSCRIBE:
userSub.Add(clientEP);
Console.WriteLine("CM recu : " + chatMess);
cmReponse = chatMess;
cmReponse.commandeType = CommandeType.REPONSE;
break;
case Commande.UNSUBSCRIBE:
userSub.Remove(clientEP);
Console.WriteLine("CM recu : " + chatMess);
cmReponse = chatMess;
cmReponse.commandeType = CommandeType.REPONSE;
break;
}
buffer = cmReponse.GetBytes();
Console.WriteLine("CM envoyé : " + cmReponse);
nBytes = serverSocket.SendTo(buffer, 0, buffer.Length, SocketFlags.None, clientEP);
// Decodage du buffer de bytes en ASCII vers un string
String msg = System.Text.Encoding.ASCII.GetString(buffer, 0, nBytes);
Console.WriteLine("Nouveau message de "
+ clientEP
+ " (" + nBytes + " octets)"
+ ": \"" + msg + "\"");
} while (chatMess.commande != Commande.STOPSERVEUR);
//************************************************************** Conclusion
// Fermeture socket
......
File added
File added
File added
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
134d674314af5161e35fd423fa0816def82c6f79
U:\Documents\DeuxiemeAnnee\S32\Projet\Chat\serveurUdp\serveurUdp\bin\Debug\serveurUdp.exe
U:\Documents\DeuxiemeAnnee\S32\Projet\Chat\serveurUdp\serveurUdp\bin\Debug\serveurUdp.pdb
U:\Documents\DeuxiemeAnnee\S32\Projet\Chat\serveurUdp\serveurUdp\obj\x86\Debug\serveurUdp.exe
U:\Documents\DeuxiemeAnnee\S32\Projet\Chat\serveurUdp\serveurUdp\obj\x86\Debug\serveurUdp.pdb
U:\Documents\DeuxiemeAnnee\S32\Projet\Chat\serveurUdp\serveurUdp\obj\x86\Debug\serveurUdp.csprojAssemblyReference.cache
U:\Documents\DeuxiemeAnnee\S32\Projet\Chat\serveurUdp\serveurUdp\obj\x86\Debug\serveurUdp.csproj.CoreCompileInputs.cache
File added
File added
......@@ -43,6 +43,7 @@
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="ChatMessage.cs" />
<Compile Include="ServeurUdp.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
......