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 176 additions and 33 deletions
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
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,39 +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'un nouveau message...");
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);
// 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 + "\"");
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);*/
while(msg != "caca")
ArrayList userSub = new ArrayList();
String message = "";
ChatMessage chatMess = null, cmReponse = null;
do
{
nBytes = serverSocket.ReceiveFrom(buffer, buffer.Length, SocketFlags.None, ref clientEP);
msg = System.Text.Encoding.ASCII.GetString(buffer, 0, nBytes);
Console.WriteLine("Nouveau message de "
+ clientEP
+ " (" + nBytes + " octets)"
+ ": \"" + msg + "\"");
}
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);
} while (chatMess.commande != Commande.STOPSERVEUR);
//************************************************************** Conclusion
// Fermeture socket
......
No preview for this file type
No preview for this file type
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>
c1c1169566e5b93b71261fa13b89ecea0c808948
134d674314af5161e35fd423fa0816def82c6f79
\\vfiler-ad-etu.ad.unistra.fr\wguthmann\Bureau\S32\Chat\serveurUdp\serveurUdp\bin\Debug\serveurUdp.exe
\\vfiler-ad-etu.ad.unistra.fr\wguthmann\Bureau\S32\Chat\serveurUdp\serveurUdp\bin\Debug\serveurUdp.pdb
\\vfiler-ad-etu.ad.unistra.fr\wguthmann\Bureau\S32\Chat\serveurUdp\serveurUdp\obj\x86\Debug\serveurUdp.csprojAssemblyReference.cache
\\vfiler-ad-etu.ad.unistra.fr\wguthmann\Bureau\S32\Chat\serveurUdp\serveurUdp\obj\x86\Debug\serveurUdp.csproj.CoreCompileInputs.cache
\\vfiler-ad-etu.ad.unistra.fr\wguthmann\Bureau\S32\Chat\serveurUdp\serveurUdp\obj\x86\Debug\serveurUdp.exe
\\vfiler-ad-etu.ad.unistra.fr\wguthmann\Bureau\S32\Chat\serveurUdp\serveurUdp\obj\x86\Debug\serveurUdp.pdb
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
No preview for this file type
No preview for this file type
......@@ -43,6 +43,7 @@
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="ChatMessage.cs" />
<Compile Include="ServeurUdp.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
......
File added
File added
File added