# socket write error bei 2. Sendeversuch



## ich² (9. Mrz 2006)

Hallo Forum,

da jetzt einmal der Einstieg in die Netzwerprogrammierung meinerseits geschafft habe ich mich mal an die Versendung von Texten gewagt. Dabei kommt es aber zu folgendem Fehler:



> java.net.SocketException: Software caused connection abort: socket write error
> at java.net.SocketOutputStream.socketWrite0(Native Method)
> at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
> at java.net.SocketOutputStream.write(SocketOutputStream.java:115)
> ...



Und zwar immer wenn ich das 2. mal etwas senden möchte. Leider kann ich den Code aufgrund meiner Unerfahrenheit nicht wirklich eingrenzen, aber er ist zum Glück noch nicht ganz so viel Code   .


```
import java.io.*;
import java.net.*;
import java.util.*;

public class Server2 {
	
	ServerSocket server = null;
	Socket client = null;
	InputStream in = null;
	OutputStream out = null;
	Vector clients = null;
	byte[] incomming = new byte[0];
	byte[] copy = null;
	byte singleByte;
	
	public Server2(int port) {
		
		try {
			server = new ServerSocket(port);
			clients = new Vector();
			startServer();
		}
		catch (IOException e) {
			e.printStackTrace();
			System.out.println("Server wird beendet");
		}
	}
	
	public void startServer() {
		
		new Thread(new Runnable() {
			public void run() {
				while (true) {
					try {
						client = server.accept();
						out = client.getOutputStream();
						in = client.getInputStream();
						incomming = new byte[0];
						while ((singleByte = (byte)in.read()) != -127) {
							copy = incomming;
							incomming = new byte[copy.length + 1];
							for (int i = 0; i < copy.length; i++) {
								incomming[i] = copy[i];
							}
							incomming[copy.length] = singleByte;
						}
						System.out.println("Eingehende Nachricht:\n" + new String(incomming));
						for (int i = 0; i < incomming.length; i++) {
							out.write(incomming[i]);
						}
						out.write((byte)-127);
						client.close();
					}
					catch (IOException e) {
						e.printStackTrace();
						System.out.println("Server wird beendet");
						System.exit(1);
					}
				}
			}
		}).start();
	}
	
	public static void main(String[] args) {
		
		new Server2(3141);
	}
}
```


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

public class Client2 {
	
	Socket server = null;
	InputStream in = null;
	OutputStream out = null;
	byte[] toWrite = null;
	byte[] incomming = new byte[0];
	byte[] copy = null;
	byte singleByte;
	
	public Client2(String host, int port) {
		
		try {
			server = new Socket(host, port);
			out = server.getOutputStream();
			in = server.getInputStream();
			startSending();
			startIncomming();
		}
		catch (IOException e) {
			e.printStackTrace();
			System.out.println("Server wird beendet");
		}
	}
	
	public void startIncomming() {
		
		new Thread(new Runnable() {
			public void run() {
				while (true) {
					try {
						incomming = new byte[0];
						while ((singleByte = (byte)in.read()) != -127) {
							copy = incomming;
							incomming = new byte[copy.length + 1];
							for (int i = 0; i < copy.length; i++) {
								incomming[i] = copy[i];
							}
							incomming[copy.length] = singleByte;
						}
						if (incomming.length != 0) {
							System.out.println("Nachricht erreicht:\n" + new String(incomming));
						}
						Thread.sleep(500);
					}
					catch (IOException e) {
						e.printStackTrace();
						System.out.println("Empfangen wird beendet");
						System.exit(1);
					}
					catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			}
		}).start();
	}
	
	public void startSending() {
		
		new Thread(new Runnable() {
			public void run() {
				while (true) {
					try {
						toWrite = new BufferedReader(new InputStreamReader(System.in)).readLine().getBytes();
						for (int i = 0; i < toWrite.length; i++) {
							out.write(toWrite[i]);
						}
						out.write((byte)-127);
					}
					catch (IOException e) {
						e.printStackTrace();
						System.out.println("Sending wird beendet");
						System.exit(1);
					}
				}
			}
		}).start();
	}
	
	public static void main(String[] args) {
		
		new Client2("localhost", 3141);
	}
}
```

Schomal danke fürs drüberschauen ...

mfg ich²


----------



## Guest (9. Mrz 2006)

Zeile 52, Server: Socket wird geschlossen! Probiere dies wo anders zu machen, wenn es tatsächlich fertig ist!


----------



## ich² (9. Mrz 2006)

Hallo Gast,

danke für den Hinweis, die Exception kommt jetzt nicht mehr. Aber jetzt kommt nurnoch die 1. Meldung beim Server an, der Rest wird einfach ohne Exception ignoriert ...


----------



## ich² (9. Mrz 2006)

tztz, was is nur mit mir los ... schon wieder vergessen (Formalität muss sein  )

mfg

ich²


----------



## ich² (10. Mrz 2006)

Hallo,

nur eine kurze Mitteilung: Ich habe die Frage auch noch auf javacore.de gestellt (einfach darum, weil ich es noch gerne vor dem Wochenende wüsste), werde aber selbstverständlich dieses Forum hier informieren falls ich dort eine Lösung finden sollte. 

mfg

ich²


----------



## ich² (10. Mrz 2006)

Hallo nochmal,

das Problem wurde jetzt auf javacore.de gelöst. Die Serverklasse muss so aussehen:


```
import java.io.*;
import java.net.*;
import java.util.*;

public class Server2 {
	
	ServerSocket server = null;
	Socket client = null;
	BufferedReader in = null;
	PrintWriter out = null;
	Vector clients = null;
	String send = null;
	
	public Server2(int port) {
		
		try {
			server = new ServerSocket(port);
			clients = new Vector();
			startServer();
		}
		catch (IOException e) {
			e.printStackTrace();
			System.out.println("Server wird beendet");
		}
	}
	
	public void startServer() {
		
		new Thread(new Runnable() {
			public void run() {
				while (true) {
					try {
						client = server.accept(); 
						out = new PrintWriter(client.getOutputStream(), true); 
						in = new BufferedReader(new InputStreamReader(client.getInputStream())); 
						while ((send = in.readLine()) != null) { 
							System.out.println("Eingehende Nachricht:\n" + send); 
							out.println(send); 
						} 
					}
					catch (IOException e) {
						e.printStackTrace();
						System.out.println("Server wird beendet");
						System.exit(1);
					}
				}
			}
		}).start();
	}
	
	public static void main(String[] args) {
		
		new Server2(3141);
	}
}
```

Trotzdem danke für eure Hilfe!

mfg

ich²


----------

