webForumDet fria alternativet

Socket

4 svar · 423 visningar · startad av Sunix

SunixMedlem sedan juli 2004310 inlägg
#1

Hej!

Jag håller på att prova socketprogrammering i Java och har problem med trådar.

På klientsidan verkar det fungera med trådar men inte på serversidan.
Jag skulle bara vilja ha en enkel dos chatt.

CLIENTKOD:

import java.io.*;
import java.net.*;

public class Client 
{
    public static void main(String[] args)throws IOException
	{
        		
	   		new SimpleThreadClient(1).start();
        	new SimpleThreadClient(2).start();
	}      
}

class SimpleThreadClient extends Thread {
 	private Socket smtpSocket = null; 
	private DataOutputStream os = null;
             private DataInputStream is = null;
	private	BufferedReader in = null;
	private	String rcvLine, sendLine;
	private int i;
	
	public SimpleThreadClient(int i)throws IOException 
	{
		this.i = i;
		smtpSocket = new Socket("TomasM", 22222);
                         os = new DataOutputStream(smtpSocket.getOutputStream());
                          is = new DataInputStream(smtpSocket.getInputStream());
		in = new BufferedReader(new InputStreamReader(System.in));
    }
   
   public void run()
   {
   		while(true)
		{
			if(i==1)
			{
				try
				{
					sendLine = in.readLine();
					os.writeBytes(sendLine + "\n");
				}
				catch (IOException e) {}
			}
			else
			{
				try
				{
					rcvLine = is.readLine();
					System.out.println(rcvLine);
				}
				catch (IOException e) {}
			}
		}
    }
}

Jag har tagit bort lite kod men denna client fungerar

SERVERKOD:

import java.io.*;
import java.net.*;

public class Server 
{
    public static void main(String args[])throws IOException
	{
		ServerSocket echoServer = null;
		Socket clientSocket = null;
                          DataInputStream is = null;
		DataOutputStream os = null;
		BufferedReader in = null;
		String rcvLine, sendLine;
		    	
	    echoServer = new ServerSocket(22222);
  
        clientSocket = echoServer.accept();
		is = new DataInputStream(clientSocket.getInputStream());
		os = new DataOutputStream(clientSocket.getOutputStream());
		in = new BufferedReader(new InputStreamReader(System.in));
		
		while (true) 
		{	
				sendLine = in.readLine();
				os.writeBytes(sendLine + "\n");
				
				rcvLine = is.readLine();
				System.out.println(rcvLine);
        }
		
			//new SimpleThreadServer(1,echoServer).start();
        	//new SimpleThreadServer(2,echoServer).start();
    }
}

class SimpleThreadServer extends Thread {
 	
	private ServerSocket echoServer = null;
	private Socket clientSocket = null;
	private DataInputStream is = null;
	private	DataOutputStream os = null;
	private	BufferedReader in = null;
	private	String rcvLine, sendLine;
	private int i;
	
	public SimpleThreadServer(int i, ServerSocket a)throws IOException 
	{
		this.i = i;
		//echoServer = new ServerSocket(22222);
		echoServer = a;
		clientSocket = echoServer.accept();
		is = new DataInputStream(clientSocket.getInputStream());
		os = new DataOutputStream(clientSocket.getOutputStream());
		in = new BufferedReader(new InputStreamReader(System.in));
    }
   
   public void run()
   {
   		while(true)
		{
			if(i==1)
			{
				try
				{
					sendLine = in.readLine();
					os.writeBytes(sendLine + "\n");
				}
				catch (IOException e) {}
			}
			else
			{
				try
				{
					rcvLine = is.readLine();
					System.out.println(rcvLine);
				}
				catch (IOException e) {}
			}
		}
    }
}

Jag använer inte simplethread i server p.g.a att det fungerar inte
Det jag vill är att tråda

sendLine = in.readLine();
				os.writeBytes(sendLine + "\n");
				
				rcvLine = is.readLine();
				System.out.println(rcvLine);

så att server och client både lyssnar och sänder samtidigt

PS. Jag är nybörjare och har ingen felhantering eller nåt för att förstå lättare ds.

SunixMedlem sedan juli 2004310 inlägg
#2

Jaha ja! jag fixade det tillslut

KODSERVER:


import java.io.*;
import java.net.*;

public class Server 
{
    public static void main(String args[])throws IOException
	{			
		ServerSocket echoServer = null;
		echoServer = new ServerSocket(22222);
		new SimpleThreadServerRcv(echoServer).start();
        new SimpleThreadServerSend(echoServer).start();
    }
}

class SimpleThreadServerRcv extends Thread {
 	
	private Socket clientSocket = null;
	private DataInputStream is = null;
	private	DataOutputStream os = null;
	private	BufferedReader in = null;
	private	String rcvLine, sendLine;
	
	public SimpleThreadServerRcv(ServerSocket socket)throws IOException 
	{
		clientSocket = socket.accept();
		is = new DataInputStream(clientSocket.getInputStream());
		os = new DataOutputStream(clientSocket.getOutputStream());
		in = new BufferedReader(new InputStreamReader(System.in));
    }
   
   public void run()
   {
   		while(true)
		{
			try
			{
				rcvLine = is.readLine();
				System.out.println(rcvLine);
			}
			catch (IOException e) {}
		}
    }
}

class SimpleThreadServerSend extends Thread {
 	
	private Socket clientSocket = null;
	private DataInputStream is = null;
	private	DataOutputStream os = null;
	private	BufferedReader in = null;
	private	String rcvLine, sendLine;
	
	public SimpleThreadServerSend(ServerSocket socket)throws IOException 
	{
		clientSocket = socket.accept();
		is = new DataInputStream(clientSocket.getInputStream());
		os = new DataOutputStream(clientSocket.getOutputStream());
		in = new BufferedReader(new InputStreamReader(System.in));
    }
   
   public void run()
   {
   		while(true)
		{
			try
			{
				sendLine = in.readLine();
				os.writeBytes(sendLine + "\n");
			}
			catch (IOException e) {}
		}
    }
}

KODCLIENT

import java.io.*;
import java.net.*;

public class Client 
{
    public static void main(String[] args)throws IOException
	{		
	 	new SimpleThreadClientSend().start();
       	new SimpleThreadClientRcv().start();
	}      
}

class SimpleThreadClientRcv extends Thread {
 	private Socket smtpSocket = null; 
	private DataOutputStream os = null;
    private DataInputStream is = null;
	private	BufferedReader in = null;
	private	String rcvLine, sendLine;
	
	public SimpleThreadClientRcv()throws IOException 
	{
		smtpSocket = new Socket("Localhost", 22222);
        os = new DataOutputStream(smtpSocket.getOutputStream());
        is = new DataInputStream(smtpSocket.getInputStream());
		in = new BufferedReader(new InputStreamReader(System.in));
    }
   
   public void run()
   {
   		while(true)
		{
			try
			{
				rcvLine = is.readLine();
				System.out.println(rcvLine);
			}
			catch (IOException e) {}
		}
    }
}

class SimpleThreadClientSend extends Thread {
 	private Socket smtpSocket = null; 
	private DataOutputStream os = null;
    private DataInputStream is = null;
	private	BufferedReader in = null;
	private	String rcvLine, sendLine;
	
	public SimpleThreadClientSend()throws IOException 
	{
		smtpSocket = new Socket("Localhost", 22222);
        os = new DataOutputStream(smtpSocket.getOutputStream());
        is = new DataInputStream(smtpSocket.getInputStream());
		in = new BufferedReader(new InputStreamReader(System.in));
    }
   
   public void run()
   {
   		while(true)
		{
			try
			{
				sendLine = in.readLine();
				os.writeBytes(sendLine + "\n");
			}
			catch (IOException e) {}
		}
    }
}

OBS! LÅNG I FRÅN PERFEKT!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Nu är det bara att få det multiclient!
Ni får gärna hjälpa mig med det!!!!!!!!!!!!!!!!!! :birp

SunixMedlem sedan juli 2004310 inlägg
#3

Eller ..... ... ...... :OO

Det verkar som jag skapat 4 trådar. 2 i client och 2 i server.
Tråd1 i client = send
Tråd2 i client = recieve

Tråd1 i server = recieve
Tråd2 i server = send

Dessa verkar tillsammans om jag fattar det rätt
Tråd1 i client send kopplad mot Tråd1 i server recieve
Tråd2 i client recieve kopplad mot Tråd2 i server send

Men det måste finnas fler och myyycket bättre sätt!!

hjälp?

ps. Hmm är jag utmobbad på detta forum? Jag får aldrig några svar längre?! Gäller fler än denna tråd ds.

LimeMedlem sedan sep. 2001961 inlägg
#4

Sunix: Dina första inlägg postade mitt i natten. Vi som normalt jobbar på dagarna orkar inte alltid sitta uppe på nätterna för att svara på dina frågor inom en timme.

På dagtid jobbar iaf jag och då har jag inte mage att sno tid som mina kunder betalar för till att svara på frågor på wF.

För att sedan gå in på dina inlägg. Det saknas en problemställning. Vad är det du vill ha hjälp med? Som jag uppfattar det så ställer du frågor som du lättast får svar på genom att göra en tutorial i Socket-hantering. Finns ett par stycken bara på Javas hemsida.

För övrig har du fattat helt rätt. Tråd1 i client sänder och Tråd 2 tar emot.
Tråd 1 i server tar emot och Tråd 2 skickar. Runt runt...

Och enklare än så blir det inte... När du sedan börjar med Multisocket kommer du att göra samma sak men där kommer du att ha en send-tråd som skickar till alla de klient-sockets som anslutits till server och då blir det genast lite knepigare.

Fortsätt posta konkreta frågor så får du konkreta svar.

SunixMedlem sedan juli 2004310 inlägg
#5

Sunix: Dina första inlägg postade mitt i natten. Vi som normalt jobbar på dagarna orkar inte alltid sitta uppe på nätterna för att svara på dina frågor inom en timme.

Jag menar egentligen hela webforum.nu. Förr fick man svar. Det får jag inte längre och då pratar jag om vecka/or. Fel av mig att säga detta just under java.

Som jag uppfattar det så ställer du frågor som du lättast får svar på genom att göra en tutorial i Socket-hantering. Finns ett par stycken bara på Javas hemsida.

Tänk det visste inte jag !!!! Tack för att du talar om det! Gärna med någon bra länk eller nåt om du vill! Allt är ju frivilligt!

För övrig har du fattat helt rätt. Tråd1 i client sänder och Tråd 2 tar emot.

Jag tror det är detta jag personligen behöver. Lite feedback, eftersom jag inte riktigt kanske vet liksom. Och vidare lite tips kanske typ: "Om du gör så här så kommer det att fungera mycket bättre" typ.
Om nån vill (frivilligt igen).

Fortsätt posta konkreta frågor så får du konkreta svar.

Eftersom jag inte vet vad jag ska fråga specifikt så kan jag inte vara konkret, tror jag.

Konkret fråga tror jag:
Trådarna fungerar bara om ServerTråd1 är recieve och om ClientTråd1 är send.
Det funkar inte med ServerTråd1.recieve - ClientTråd2.send.

Varför?

Tack på förhand

132 ms totalt · 3 externa anrop · v20260731065814-full.2b84b982
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)