Echange de messages en TCP fonctionne
这个提交包含在:
父节点
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/gui/package-info.class
普通文件
二进制文件未显示。
二进制
chat/bin/model/MessageChat.class
普通文件
二进制
chat/bin/model/MessageChat.class
普通文件
二进制文件未显示。
二进制
chat/bin/network/TCPChat.class
普通文件
二进制
chat/bin/network/TCPChat.class
普通文件
二进制文件未显示。
二进制
chat/bin/network/TCPServer.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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
22
chat/src/model/MessageChat.java
普通文件
22
chat/src/model/MessageChat.java
普通文件
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
92
chat/src/network/TCPChat.java
普通文件
92
chat/src/network/TCPChat.java
普通文件
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
}
|
45
chat/src/network/TCPServer.java
普通文件
45
chat/src/network/TCPServer.java
普通文件
|
@ -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");
|
||||
}
|
||||
}
|
||||
|
正在加载…
在新工单中引用