Echange de messages en TCP fonctionne

这个提交包含在:
Morgane Foussats 2020-12-04 18:16:41 +01:00
父节点 9e8e9396ed
当前提交 08a649b27a
共有 19 个文件被更改,包括 216 次插入16 次删除

查看文件

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-13">
<classpathentry exported="true" kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER">
<attributes>
<attribute name="module" value="true"/>
</attributes>

查看文件

@ -1,5 +1,6 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
org.eclipse.jdt.core.compiler.codegen.targetPlatform=13
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=13

二进制文件未显示。

二进制文件未显示。

二进制
chat/bin/gui/package-info.class 普通文件

二进制文件未显示。

二进制
chat/bin/model/MessageChat.class 普通文件

二进制文件未显示。

二进制
chat/bin/network/TCPChat.class 普通文件

二进制文件未显示。

二进制
chat/bin/network/TCPServer.class 普通文件

二进制文件未显示。

查看文件

@ -9,17 +9,22 @@ import network.*;
public class Agent {
private Contact user;
private BroadcastInput BIn;
private BroadcastOutput BOut;
private UDPInput BIn;
private UDPOutput BOut;
private TCPChat TCPSend;
private TCPServer server;
private ListeContacts list;
public Agent(InetAddress address, int portIn, int portOut) throws SocketException {
this.user = new Contact("Bob", address, portIn);
this.BIn = new BroadcastInput(user.getAddress(), portIn);
this.BOut = new BroadcastOutput(user, portOut);
public Agent(InetAddress address, int portIn, int portOut) throws IOException {
this.user = new Contact("", address, portIn);
this.BIn = new UDPInput(user.getAddress(), portIn);
this.BOut = new UDPOutput(user, portOut);
this.server = new TCPServer(user.getPort(), user.getAddress());
this.TCPSend = new TCPChat(user);
this.list = ListeContacts.getInstance();
}
//Envoi sur 5001 et reçoit sur 5000
@ -30,6 +35,32 @@ public class Agent {
Thread.sleep(10);
MessagePseudo msgRecu = BIn.getMessage();
handleMessage(msgRecu);
MessagePseudo msg2 = new MessagePseudo(this.user.getAddress(), Tools.getLocalIp(), user.getPort(), 14000, 1, "Jacques");
BOut.send(msg2, user.getAddress(), user.getPort());
Thread.sleep(10);
MessagePseudo msgRecu2 = BIn.getMessage();
handleMessage(msgRecu2);
MessagePseudo msg3 = new MessagePseudo(this.user.getAddress(), Tools.getLocalIp(), user.getPort(), 14000, 1, "Bob");
BOut.send(msg3, user.getAddress(), user.getPort());
Thread.sleep(10);
MessagePseudo msgRecu3 = BIn.getMessage();
handleMessage(msgRecu3);
choisirPseudo("Bob");
choisirPseudo("Patrick");
}
public void testSendTCP() throws IOException, InterruptedException {
TCPSend.sendMsg("COUCOU");
Thread.sleep(1000);
TCPSend.sendMsg("Ca va ?");
Thread.sleep(1000);
TCPSend.sendMsg("Non je suis KO");
Thread.sleep(1000);
TCPSend.sendMsg("Moi aussi :'(");
Thread.sleep(1000);
}
public void handleMessage(MessagePseudo msg) {
@ -39,4 +70,13 @@ public class Agent {
}
}
public void choisirPseudo(String pseudo) {
if(!list.pseudoExist(pseudo)){
user.setPseudo(pseudo);
System.out.println("Pseudo set : "+pseudo);
}else {
System.out.println("Pseudo déjà utilisé");
}
}
}

查看文件

@ -6,7 +6,7 @@ import network.Tools;
public class Test {
public static void main(String args[]) throws IOException, InterruptedException {
Agent agent1 = new Agent(Tools.getLocalIp(), 14000, 14001);
agent1.testSendBroadcast();
Agent agent1 = new Agent(Tools.getLocalIp(), 18000, 18001);
agent1.testSendTCP();
}
}

查看文件

@ -0,0 +1 @@
package gui;

查看文件

@ -50,5 +50,4 @@ public class Contact {
public void setPort(int port) {
this.port = port;
}
}

查看文件

@ -0,0 +1,22 @@
package model;
import java.net.InetAddress;
public class MessageChat extends Message{
private String message;
public MessageChat(InetAddress addressSrc, InetAddress addressDest, int portSrc, int portDest, int typeMessage, String message) {
super(addressSrc, addressDest, portSrc, portDest, typeMessage);
this.message = message;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}

查看文件

@ -0,0 +1,92 @@
package network;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.ArrayList;
import model.Contact;
import model.MessageChat;
public class TCPChat extends Thread{
private ArrayList<MessageChat> listeMessagesRecu;
private Socket socket;
//connexion faite par un autre user
public TCPChat(Socket socket) {
this.socket = socket;
listeMessagesRecu = new ArrayList<MessageChat>();
this.start();
}
//connexion faite par le user
public TCPChat(Contact user) throws IOException {
this.socket = new Socket(user.getAddress(), user.getPort());
listeMessagesRecu = new ArrayList<MessageChat>();
this.start();
}
@Override
public void run() {
BufferedReader in;
try {
in = new BufferedReader(new InputStreamReader(this.socket.getInputStream()));
while(true) {
try {
String input = in.readLine();
MessageChat msgRecu = new MessageChat(this.socket.getInetAddress(), this.socket.getLocalAddress(), this.socket.getPort(), this.socket.getLocalPort(), 0, input);
listeMessagesRecu.add(msgRecu);
//if (!msgRecu.getMessage().equals(null)) {
System.out.println("Message reçu : "+msgRecu.getMessage() );
//}
} catch (IOException e) {
System.out.println("Création et read du in impossible");
e.printStackTrace();
}
}
} catch (IOException e1) {
System.out.println("pb création in");
e1.printStackTrace();
}
}
public void sendMsg(String message) throws IOException {
PrintWriter out = new PrintWriter(this.socket.getOutputStream(),true);
out.println(message);
System.out.println("Message envoyé : "+message);
}
public MessageChat getMessageRecu() {
return listeMessagesRecu.remove(0);
}
public ArrayList<MessageChat> getListeMessagesRecu() {
return listeMessagesRecu;
}
public void setListeMessagesRecu(ArrayList<MessageChat> listeMessagesRecu) {
this.listeMessagesRecu = listeMessagesRecu;
}
public Socket getSocket() {
return socket;
}
public void setSocket(Socket socket) {
this.socket = socket;
}
}

查看文件

@ -0,0 +1,45 @@
package network;
import java.io.IOException;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
public class TCPServer extends Thread{
private ServerSocket socket;
private InetAddress address;
private int port;
private ArrayList<TCPChat> listeConnexions;
public TCPServer(int port, InetAddress address) throws IOException {
this.socket = new ServerSocket(port, 1000, address);
this.address = address;
this.port = port;
this.listeConnexions = new ArrayList<TCPChat>();
this.start();
}
@Override
public void run() {
Socket link;
try {
link = socket.accept();
this.listeConnexions.add(new TCPChat(link));
//link.close();// A APPELER QUELQUE PART D'AUTRE
} catch (IOException e) {
System.out.println("Socket non créé ou non fermé");
e.printStackTrace();
}
}
public InetAddress getAddress() {
return address;
}
public void setAddress(InetAddress address) {
this.address = address;
}
}

查看文件

@ -9,11 +9,11 @@ import java.net.*;
import java.util.ArrayList;
public class BroadcastInput extends Thread{
public class UDPInput extends Thread{
private DatagramSocket socket;
private ArrayList<MessagePseudo> messageReceived;
public BroadcastInput(InetAddress localAddress, int port) throws SocketException {
public UDPInput(InetAddress localAddress, int port) throws SocketException {
this.socket = new DatagramSocket(port, localAddress);
this.socket.setBroadcast(true);
this.messageReceived = new ArrayList<MessagePseudo>();

查看文件

@ -9,12 +9,12 @@ import java.net.*;
public class BroadcastOutput {
public class UDPOutput {
private Contact user;
private DatagramSocket socket;
private int port;
public BroadcastOutput(Contact user, int port) throws SocketException {
public UDPOutput(Contact user, int port) throws SocketException {
this.user = user;
this.port = port;
this.socket = new DatagramSocket(port, user.getAddress());
@ -22,7 +22,7 @@ public class BroadcastOutput {
}
public void send(MessagePseudo msg, InetAddress addressDest, int portDest) throws IOException {
public void send(MessagePseudo msg, InetAddress addressDest, int portSrc) throws IOException {
byte[] buffer = "".getBytes();
ByteArrayOutputStream byteOutStream = new ByteArrayOutputStream();
ObjectOutputStream objectOutStream = new ObjectOutputStream(byteOutStream);
@ -31,7 +31,7 @@ public class BroadcastOutput {
buffer = byteOutStream.toByteArray();
DatagramPacket packet = new DatagramPacket(buffer,buffer.length,msg.getAddressDest(),msg.getPortDest());
this.socket.send(packet);
System.out.println("Message envoyé, pseudo = "+msg.getPseudo()+" et num port destination = "+portDest+"\n");
System.out.println("Message envoyé, pseudo = "+msg.getPseudo()+" et num port destination = "+portSrc+"\n");
}
}