Eu andei modificando o cliente, então pode não estar exatamente do jeito que estava antes, mas é assim:
Classe “Comunicacao” do Cliente:
[code]package com.zmeck_c.tcp;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.SocketException;
import com.zmeck_c.Principal;
import com.zmeck_c.util.Ig;
public class Comunicacao {
public static String pegarPacote(Socket sock){
String pac = "";
try{
BufferedReader leitorBuffer = new BufferedReader(new InputStreamReader(sock.getInputStream()));
while(true){
char[] next = new char[10000];
int tamanho = leitorBuffer.read(next);
String proximo = "";
for(int i = 0; i < tamanho; i++){
proximo += next[i];
}
pac += proximo;
if(proximo.charAt(proximo.length() - 1) == (char)2){
pac = pac.substring(0, pac.length() - 1);
break;
}
}
}
catch(SocketException e){
Ig.mensagemAlerta("Você foi desconectado. Tente se conectar novamente.");
System.exit(0);
} catch (IOException e) {
e.printStackTrace();
}
return pac;
}
public static void enviarPacote(String pacote){
try{
//BufferedWriter escritorBuffer = new BufferedWriter(new OutputStreamWriter(Principal.S.getOutputStream()));
int t = 0;
int paclen = pacote.length();
boolean quebra = false;
for(int i = 0; i < paclen; i++){
for(int m = 0; m < 10000; m++){
if(pacote.length() < 10000){
BufferedWriter escritorBuffer = new BufferedWriter(new OutputStreamWriter(Principal.S.getOutputStream()));
escritorBuffer.write(pacote + (char)2);
escritorBuffer.flush();
t = t + 10000;
quebra = true;
System.out.println("FLUSH");
break;
}
else{
String proximo = pacote.substring(0, 10000);
pacote = pacote.substring(10000, pacote.length());
BufferedWriter escritorBuffer = new BufferedWriter(new OutputStreamWriter(Principal.S.getOutputStream()));
escritorBuffer.write(proximo);
escritorBuffer.flush();
t = t + 10000;
//System.out.println(t + " " + paclen + " " + pacote.length());
}
}
if(quebra == true){
break;
}
}
}
catch (IOException e){
}
System.out.println("FUCK");
}
}
[/code]
Classe “Comunicação” do Servidor:
[code]package com.zmeck_s.tcp;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
public class Comunicacao {
public static void enviarPacote(int idConexao, String pacote){
//System.out.println("[SERVIDOR] enviou para [" + idConexao + "]: " + pacote);
if(FabricaConexoes.conexoesArmazenadas.get(idConexao).pegarConectado()){
try{
//BufferedWriter escritorBuffer = new BufferedWriter(new OutputStreamWriter(Principal.S.getOutputStream()));
int t = 0;
int paclen = pacote.length();
boolean quebra = false;
for(int i = 0; i < paclen; i++){
for(int m = 0; m < 10000; m++){
if(pacote.length() < 10000){
BufferedWriter escritorBuffers = new BufferedWriter(new OutputStreamWriter(FabricaConexoes.conexoesArmazenadas.get(idConexao).pegarFluxoDados().getOutputStream()));
escritorBuffers.write(pacote + (char)2);
escritorBuffers.flush();
System.out.println("SERVIDOR >> " + pacote + (char)2);
t = t + 10000;
quebra = true;
//System.out.println("enviado");
break;
}
else{
String proximo = pacote.substring(0, 10000);
pacote = pacote.substring(10000, pacote.length());
BufferedWriter escritorBuffers = new BufferedWriter(new OutputStreamWriter(FabricaConexoes.conexoesArmazenadas.get(idConexao).pegarFluxoDados().getOutputStream()));
escritorBuffers.write(proximo);
escritorBuffers.flush();
System.out.println("SERVIDOR >> " + proximo);
//System.out.println("enviado");
t = t + 10000;
}
}
if(quebra == true){
break;
}
}
}
catch (IOException e){
}
}
}
public static void enviarPacoteTodos(String pacote){
int nConexoes = FabricaConexoes.conexoesArmazenadas.size();
for(int i = 0; i < nConexoes; i++){
try {
System.out.println("[SERVIDOR] enviou para [" + FabricaConexoes.conexoesArmazenadas.get(i).pegarIdConexao() + "]: " + pacote);
if(FabricaConexoes.conexoesArmazenadas.get(i).pegarConectado()){
BufferedWriter escritorBuffers = new BufferedWriter(new OutputStreamWriter(FabricaConexoes.conexoesArmazenadas.get(i).pegarFluxoDados().getOutputStream()));
escritorBuffers.write(pacote);
escritorBuffers.flush();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
[/code]
Classe “Conexao” do Servidor:
[code]package com.zmeck_s.tcp;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.SocketException;
import java.util.ArrayList;
import com.zmeck_s.Principal;
import com.zmeck_s.util.Escritor;
public class Conexao extends Thread {
private Socket fluxoDados = null;
private int idConexao = -1;
private String enderecoIp = null;
private boolean conectado = false;
private int idLogin = 0;
public Conexao(Socket fluxoDados, int idConexao, String enderecoIp){
this.fluxoDados = fluxoDados;
this.idConexao = idConexao;
this.enderecoIp = enderecoIp;
FabricaConexoes.contagemConexoes++;
start();
System.out.println("[!] Nova conexao: [IP: " + enderecoIp + "]-[ID: " + idConexao + "]");
setarConectado(true);
}
public void run() {
while(fluxoDados.isConnected()){
try {
BufferedReader leitorBuffer = new BufferedReader(new InputStreamReader(fluxoDados.getInputStream()));
String pac = "";
while(true){
//System.out.println("here");
char[] next = new char[10000];
int tamanho = leitorBuffer.read(next);
String proximo = "";
for(int x = 0; x < tamanho; x++){
proximo += next[x];
}
pac += proximo;
if(proximo.charAt(proximo.length() - 1) == (char)2){
break;
}
}
ArrayList<String> pacotes = Escritor.separar(pac, (char)2);
for(int i = 0; i < pacotes.size(); i++){
Tratamento.tratamento(idConexao, pacotes.get(i));
}
}
catch (SocketException e){
interrupt();
System.out.println("Conexao: " + enderecoIp + "-" + idConexao + " perdida. (SocketException).");
FabricaConexoes.contagemConexoes--;
setarConectado(false);
Principal.CLIENTES.get(idLogin).setarConectado(false);
break;
}
catch (IOException e) {
interrupt();
System.out.println("Conexao: " + enderecoIp + "-" + idConexao + " perdida. (IOException).");
FabricaConexoes.contagemConexoes--;
setarConectado(false);
Principal.CLIENTES.get(idLogin).setarConectado(false);
break;
}
}
}
public Socket pegarFluxoDados(){
return fluxoDados;
}
public int pegarIdConexao(){
return idConexao;
}
public String pegarEnderecoIp(){
return enderecoIp;
}
public void setarIDLogin(int idLogin){
this.idLogin = idLogin;
}
public int pegarIDLogin(){
return idLogin;
}
public void setarConectado(boolean conectado){
this.conectado = conectado;
}
public boolean pegarConectado(){
return conectado;
}
public void desconectar(){
try {
fluxoDados.shutdownInput();
Comunicacao.enviarPacote(idConexao, "Buzzy ;D");
} catch (IOException e) {
e.printStackTrace();
}
}
}
[/code]