Nochmal UDP

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hi ich hab kurze frage zu UDP:

Client und Server sind auf dem selben PC.
Client sagt das der Port 27900 schon belegt ist.
Code:
		message = testTCP(server, message, 6667);
		message = testTCP(server, message, 28910);
		message = testTCP(server, message, 29900);
		message = testTCP(server, message, 29920);
		textArea.setText(message);

		message = testUDP(server, message, 27900);
		message = testUDP(server, message, 4321);

Wenn ich die applikation meinem vServer starte und mich lokal damit verbinde scheint es so alsob keine Verbindung offen ist.

Hier die Klassen:

Server:
Code:
package de;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.ServerSocket;
import java.net.Socket;

public class Tester{
	public static class UDPTester extends Thread {
		public final int port;
		private final DatagramPacket paket;

		public UDPTester(int port) {
			super("UDP " + port);
			this.port = port;
			paket = new DatagramPacket(new byte[256], 256);
		}

		public void run() {
			while (isAlive()) {
				DatagramSocket socket;
				try {
					socket = new DatagramSocket(port);

					for (;;) {

						// Warten auf nächstes Paket
						socket.receive(paket);
						String text = new String(paket.getData(), 0, paket
								.getLength());
						paket.setData(text.toUpperCase().getBytes());
						socket.send(paket);
					}
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}

	public static class TCPTester extends Thread {
		public final int port;
		private ServerSocket serSock;

		public TCPTester(int port) throws IOException {
			super("TCP " + port);
			this.port = port;
			serSock = new ServerSocket(port);
		}

		public void run() {
			while (isAlive()) {
				try {
					Socket accept = serSock.accept();
					String string = "Connection OK to port: " + port;
					accept.getOutputStream().write(string.getBytes());
					accept.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}

	public static void main(String[] args) {
		try {
			TCPTester t6667 = new TCPTester(6667);
			TCPTester t28910 = new TCPTester(28910);
			TCPTester t29900 = new TCPTester(29900);
			TCPTester t29920 = new TCPTester(29920);

			UDPTester u4321 = new UDPTester(4321);
			UDPTester u27900 = new UDPTester(27900);

			// Starten
			t6667.start();
			t28910.start();
			t29900.start();
			t29920.start();

			u4321.start();
			u27900.start();
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

hier das client-applet:
Code:
package de;

import java.io.InputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.Socket;

import javax.swing.JApplet;
import javax.swing.JTextArea;

public class CNCTestApplet extends JApplet {
	private JTextArea textArea;

	@Override
	public void init() {
		textArea = new JTextArea("Tester (re)initialized.");
		getContentPane().add(textArea);
	}

	public void start() {
		String server = getDocumentBase().getHost();
		if (server.equals(""))
			server = "[i]xx.xx.xx.xx[/i]";
		String message = "\nServer: " + server;

		message = testTCP(server, message, 6667);
		message = testTCP(server, message, 28910);
		message = testTCP(server, message, 29900);
		message = testTCP(server, message, 29920);
		textArea.setText(message);

		message = testUDP(server, message, 27900);
		message = testUDP(server, message, 4321);
		textArea.setText(message);
	}

	private String testTCP(String server, String message, int port) {
		message += "\n";
		try {
			message += "Try Connect to port " + port;
			message += "\n";
			Socket s = new Socket(server, port);

			InputStream is = s.getInputStream();
			byte read = ':';
			int chars = 0;
			while (s.isBound() && chars < 200 && read != -1) {

				message += (char) read;
				chars++;

				read = (byte) is.read();
			}
		} catch (Exception e) {
			message += e;

		}

		return message;

	} 

	private String testUDP(String server, String message, int port) {
		message += "\n";
		try {

			message += "Try Connect to port " + port;
			message += "\n";
			DatagramPacket dp = new DatagramPacket(new byte[256], 256);

			InetAddress byName = InetAddress
					.getByName(server);
			DatagramSocket ds = new DatagramSocket(port, byName);
			
			ds.setSoTimeout(200);
			ds.receive(dp);
			String string = new String(dp.getData());
			message += string;
			ds.close();

		} catch (Exception e) {
			message += e;

		}

		return message;

	}
}
 
G

Guest

Gast
Anonymous hat gesagt.:
Hi ich hab kurze frage zu UDP:

Client und Server sind auf dem selben PC.
Client sagt das der Port 27900 schon belegt ist.
Code:
		message = testTCP(server, message, 6667);
		message = testTCP(server, message, 28910);
		message = testTCP(server, message, 29900);
		message = testTCP(server, message, 29920);
		textArea.setText(message);

		message = testUDP(server, message, 27900);
		message = testUDP(server, message, 4321);

Wenn ich die applikation meinem vServer starte und mich lokal damit verbinde scheint es so alsob keine Verbindung offen ist.

Hier die Klassen:

Server:
Code:
package de;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.ServerSocket;
import java.net.Socket;

public class Tester{
	public static class UDPTester extends Thread {
		public final int port;
		private final DatagramPacket paket;

		public UDPTester(int port) {
			super("UDP " + port);
			this.port = port;
			paket = new DatagramPacket(new byte[256], 256);
		}

		public void run() {
			while (isAlive()) {
				DatagramSocket socket;
				try {
					socket = new DatagramSocket(port);

					for (;;) {

						// Warten auf nächstes Paket
						socket.receive(paket);
						String text = new String(paket.getData(), 0, paket
								.getLength());
						paket.setData(text.toUpperCase().getBytes());
						socket.send(paket);
					}
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}

	public static class TCPTester extends Thread {
		public final int port;
		private ServerSocket serSock;

		public TCPTester(int port) throws IOException {
			super("TCP " + port);
			this.port = port;
			serSock = new ServerSocket(port);
		}

		public void run() {
			while (isAlive()) {
				try {
					Socket accept = serSock.accept();
					String string = "Connection OK to port: " + port;
					accept.getOutputStream().write(string.getBytes());
					accept.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}

	public static void main(String[] args) {
		try {
			TCPTester t6667 = new TCPTester(6667);
			TCPTester t28910 = new TCPTester(28910);
			TCPTester t29900 = new TCPTester(29900);
			TCPTester t29920 = new TCPTester(29920);

			UDPTester u4321 = new UDPTester(4321);
			UDPTester u27900 = new UDPTester(27900);

			// Starten
			t6667.start();
			t28910.start();
			t29900.start();
			t29920.start();

			u4321.start();
			u27900.start();
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

hier das client-applet:
Code:
package de;

import java.io.InputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.Socket;

import javax.swing.JApplet;
import javax.swing.JTextArea;

public class CNCTestApplet extends JApplet {
	private JTextArea textArea;

	@Override
	public void init() {
		textArea = new JTextArea("Tester (re)initialized.");
		getContentPane().add(textArea);
	}

	public void start() {
		String server = getDocumentBase().getHost();
		if (server.equals(""))
			server = "[i]xx.xx.xx.xx[/i]";
		String message = "\nServer: " + server;

		message = testTCP(server, message, 6667);
		message = testTCP(server, message, 28910);
		message = testTCP(server, message, 29900);
		message = testTCP(server, message, 29920);
		textArea.setText(message);

		message = testUDP(server, message, 27900);
		message = testUDP(server, message, 4321);
		textArea.setText(message);
	}

	private String testTCP(String server, String message, int port) {
		message += "\n";
		try {
			message += "Try Connect to port " + port;
			message += "\n";
			Socket s = new Socket(server, port);

			InputStream is = s.getInputStream();
			byte read = ':';
			int chars = 0;
			while (s.isBound() && chars < 200 && read != -1) {

				message += (char) read;
				chars++;

				read = (byte) is.read();
			}
		} catch (Exception e) {
			message += e;

		}

		return message;

	} 

	private String testUDP(String server, String message, int port) {
		message += "\n";
		try {

			message += "Try Connect to port " + port;
			message += "\n";
			DatagramPacket dp = new DatagramPacket(new byte[256], 256);

			InetAddress byName = InetAddress
					.getByName(server);
			DatagramSocket ds = new DatagramSocket(port, byName);
			
			ds.setSoTimeout(200);
			ds.receive(dp);
			String string = new String(dp.getData());
			message += string;
			ds.close();

		} catch (Exception e) {
			message += e;

		}

		return message;

	}
}

was mache ich falsch/wie verbinde ich also auf meinen server per UDP?
 

HoaX

Top Contributor
a) mit udp kannst du dich nicht verbinden, da es verbindungslos ist
b) tut das not wegen einer einzigen zeile 200 andere zu zitieren?
 
G

Guest

Gast
HoaX hat gesagt.:
a) mit udp kannst du dich nicht verbinden, da es verbindungslos ist
b) tut das not wegen einer einzigen zeile 200 andere zu zitieren?
Schon klar, aber meine frage ist warum ich keine verbindung zum server aufbauen kann!
 
G

Guest

Gast
DocRandom hat gesagt.:
Anonymous hat gesagt.:
HoaX hat gesagt.:
a) mit udp kannst du dich nicht verbinden, da es verbindungslos ist
b) tut das not wegen einer einzigen zeile 200 andere zu zitieren?
Schon klar, aber meine frage ist warum ich keine verbindung zum server aufbauen kann!
..also doch nicht klar!
Oder was glaubst Du heißt verbindungslos?

lg
DocRandom
Ich formuliere es mal anders:
Meine frage ist warum ich keine kommunikation zum server herstellen kann!
Besser?
 

HoaX

Top Contributor
weil du es nirgendwo versuchst? ich seh keine stelle an der du etwas an den server sendest ...
 
G

Guest

Gast
Anonymous hat gesagt.:
HoaX hat gesagt.:
weil du es nirgendwo versuchst? ich seh keine stelle an der du etwas an den server sendest ...
Oh, das wirds sein!
Geht trotzdem nicht.


java.net.BindException: Cannot assign requested address: Cannot bind
at java.net.PlainDatagramSocketImpl.bind0(Native Method)
at java.net.PlainDatagramSocketImpl.bind(Unknown Source)
at java.net.DatagramSocket.bind(Unknown Source)
at java.net.DatagramSocket.<init>(Unknown Source)
at java.net.DatagramSocket.<init>(Unknown Source)
at de.CNCTestApplet.testUDP(CNCTestApplet.java:74)
at de.CNCTestApplet.start(CNCTestApplet.java:34)
at sun.applet.AppletPanel.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
 
G

Guest

Gast
DocRandom hat gesagt.:
Dann schau Dir mal diese Beispiele an, evtl kommst dann weiter!

lg
DocRandom
Tatsächlich!
port und byName gehören zum Packet, nicht zum DatagramSocket.
So müssen "port, byName" aus Zeile 74 in Zeile 70.

Dann klapp's auch mit dem Server.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
P FTP Nochmal wachsende Datei per FTP lesen Netzwerkprogrammierung 9

Ähnliche Java Themen


Oben