Mar 13, 2012 4:01 pm
GuestI want to establish connection to a server(written by myself in Go language), read from socket, and then write into socket.
The connection can be established, and it reads correctly. But after that and when I want to write to socket, it closes the connection. I used wireshark to listen to the packets. I saw my program sent a FIN to the server side. So the server receives nothing.
Note that the server side only sends one line into socket.
I later wrote a server in Java and a client in Go. They work fine in both read and write.
Thanks in advance!
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class DeserializerTester {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
Socket s = null;
BufferedReader in = null;
BufferedWriter out = null;
//PrintWriter out = null;
try {
s = new Socket("127.0.0.1", 9999);
in = new BufferedReader(new InputStreamReader(s.getInputStream()));
//out = new PrintWriter(s.getOutputStream(), false);
out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
} catch (UnknownHostException e) {
System.err.println("Unknown host");
System.exit(0);
} catch (IOException e) {
System.err.println("IO error");
System.exit(1);
}
String msg = "";
msg = in.readLine();
System.out.println(msg);
out.write("\"hi, socket\"");
s.close();
}
}
Mar 13, 2012 4:14 pm
Arne VajhøjOn 3/13/2012 12:01 PM, liyaohua.bupt@gmail.com wrote:
> I want to establish connection to a server(written by myself in Go language), read from socket, and then write into socket.
>
> The connection can be established, and it reads correctly. But after that and when I want to write to socket, it closes the connection. I used wireshark to listen to the packets. I saw my program sent a FIN to the server side. So the server receives nothing.
>
> Note that the server side only sends one line into socket.
>
> I later wrote a server in Java and a client in Go. They work fine in both read and write.
>
> The connection can be established, and it reads correctly. But after that and when I want to write to socket, it closes the connection. I used wireshark to listen to the packets. I saw my program sent a FIN to the server side. So the server receives nothing.
>
> Note that the server side only sends one line into socket.
>
> I later wrote a server in Java and a client in Go. They work fine in both read and write.
> import java.io.BufferedReader;
> import java.io.BufferedWriter;
> import java.io.IOException;
> import java.io.InputStreamReader;
> import java.io.OutputStreamWriter;
> import java.io.PrintWriter;
> import java.net.Socket;
> import java.net.UnknownHostException;
>
> public class DeserializerTester {
> public static void main(String[] args) throws IOException {
> // TODO Auto-generated method stub
> Socket s = null;
> BufferedReader in = null;
> BufferedWriter out = null;
> //PrintWriter out = null;
>
> try {
> s = new Socket("127.0.0.1", 9999);
> in = new BufferedReader(new InputStreamReader(s.getInputStream()));
> //out = new PrintWriter(s.getOutputStream(), false);
> out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
> } catch (UnknownHostException e) {
> System.err.println("Unknown host");
> System.exit(0);
> } catch (IOException e) {
> System.err.println("IO error");
> System.exit(1);
> }
>
> String msg = "";
>
> msg = in.readLine();
> System.out.println(msg);
>
> out.write("\"hi, socket\"");
> import java.io.BufferedWriter;
> import java.io.IOException;
> import java.io.InputStreamReader;
> import java.io.OutputStreamWriter;
> import java.io.PrintWriter;
> import java.net.Socket;
> import java.net.UnknownHostException;
>
> public class DeserializerTester {
> public static void main(String[] args) throws IOException {
> // TODO Auto-generated method stub
> Socket s = null;
> BufferedReader in = null;
> BufferedWriter out = null;
> //PrintWriter out = null;
>
> try {
> s = new Socket("127.0.0.1", 9999);
> in = new BufferedReader(new InputStreamReader(s.getInputStream()));
> //out = new PrintWriter(s.getOutputStream(), false);
> out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
> } catch (UnknownHostException e) {
> System.err.println("Unknown host");
> System.exit(0);
> } catch (IOException e) {
> System.err.println("IO error");
> System.exit(1);
> }
>
> String msg = "";
>
> msg = in.readLine();
> System.out.println(msg);
>
> out.write("\"hi, socket\"");
Try:
out.flush();
here.
> s.close();
> }
>
> }
> }
>
> }
Arne
Mar 13, 2012 4:30 pm
GuestIt works! Thanks! It busted me for quite a while.
On Tuesday, March 13, 2012 11:14:36 AM UTC-5, Arne Vajhøj wrote:
> On 3/13/2012 12:01 PM, liyaohua.bupt@gmail.com wrote:
> Try:
>
> out.flush();
>
> here.
>
> Arne
> > I want to establish connection to a server(written by myself in Go language), read from socket, and then write into socket.
> >
> > The connection can be established, and it reads correctly. But after that and when I want to write to socket, it closes the connection. I used wireshark to listen to the packets. I saw my program sent a FIN to the server side. So the server receives nothing.
> >
> > Note that the server side only sends one line into socket.
> >
> > I later wrote a server in Java and a client in Go. They work fine in both read and write.
> > >
> > The connection can be established, and it reads correctly. But after that and when I want to write to socket, it closes the connection. I used wireshark to listen to the packets. I saw my program sent a FIN to the server side. So the server receives nothing.
> >
> > Note that the server side only sends one line into socket.
> >
> > I later wrote a server in Java and a client in Go. They work fine in both read and write.
> > import java.io.BufferedReader;
> > import java.io.BufferedWriter;
> > import java.io.IOException;
> > import java.io.InputStreamReader;
> > import java.io.OutputStreamWriter;
> > import java.io.PrintWriter;
> > import java.net.Socket;
> > import java.net.UnknownHostException;
> >
> > public class DeserializerTester {
> > public static void main(String[] args) throws IOException {
> > // TODO Auto-generated method stub
> > Socket s = null;
> > BufferedReader in = null;
> > BufferedWriter out = null;
> > //PrintWriter out = null;
> >
> > try {
> > s = new Socket("127.0.0.1", 9999);
> > in = new BufferedReader(new InputStreamReader(s.getInputStream()));
> > //out = new PrintWriter(s.getOutputStream(), false);
> > out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
> > } catch (UnknownHostException e) {
> > System.err.println("Unknown host");
> > System.exit(0);
> > } catch (IOException e) {
> > System.err.println("IO error");
> > System.exit(1);
> > }
> >
> > String msg = "";
> >
> > msg = in.readLine();
> > System.out.println(msg);
> >
> > out.write("\"hi, socket\"");
> > > import java.io.BufferedWriter;
> > import java.io.IOException;
> > import java.io.InputStreamReader;
> > import java.io.OutputStreamWriter;
> > import java.io.PrintWriter;
> > import java.net.Socket;
> > import java.net.UnknownHostException;
> >
> > public class DeserializerTester {
> > public static void main(String[] args) throws IOException {
> > // TODO Auto-generated method stub
> > Socket s = null;
> > BufferedReader in = null;
> > BufferedWriter out = null;
> > //PrintWriter out = null;
> >
> > try {
> > s = new Socket("127.0.0.1", 9999);
> > in = new BufferedReader(new InputStreamReader(s.getInputStream()));
> > //out = new PrintWriter(s.getOutputStream(), false);
> > out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
> > } catch (UnknownHostException e) {
> > System.err.println("Unknown host");
> > System.exit(0);
> > } catch (IOException e) {
> > System.err.println("IO error");
> > System.exit(1);
> > }
> >
> > String msg = "";
> >
> > msg = in.readLine();
> > System.out.println(msg);
> >
> > out.write("\"hi, socket\"");
> Try:
>
> out.flush();
>
> here.
>
> > s.close();
> > }
> >
> > }
> > > }
> >
> > }
> Arne
Mar 13, 2012 5:30 pm
Daniel PittsLiyaohua, please realize the reason is that you use a BufferedWriter,
and you close the socket directly. The BufferedWriter has no way to
hook into that close and flush itself. out.close instead of s.close()
would achieve the same thing. Beware though that sometimes you don't
want to close a socket just because you're done with the OutputStream
(or InputStream).
Sorry to top post but I'm afraid the OP might not see this comment
otherwise...
On 3/13/12 9:30 AM, liyaohua.bupt@gmail.com wrote:
> It works! Thanks! It busted me for quite a while.
>
> On Tuesday, March 13, 2012 11:14:36 AM UTC-5, Arne Vajhøj wrote:
>
> On Tuesday, March 13, 2012 11:14:36 AM UTC-5, Arne Vajhøj wrote:
>> On 3/13/2012 12:01 PM, liyaohua.bupt@gmail.com wrote:
>> Try:
>>
>> out.flush();
>>
>> here.
>>
>> Arne
>>>> I want to establish connection to a server(written by myself in Go language), read from socket, and then write into socket.
>>>
>>> The connection can be established, and it reads correctly. But after that and when I want to write to socket, it closes the connection. I used wireshark to listen to the packets. I saw my program sent a FIN to the server side. So the server receives nothing.
>>>
>>> Note that the server side only sends one line into socket.
>>>
>>> I later wrote a server in Java and a client in Go. They work fine in both read and write.
>>>>>
>>> The connection can be established, and it reads correctly. But after that and when I want to write to socket, it closes the connection. I used wireshark to listen to the packets. I saw my program sent a FIN to the server side. So the server receives nothing.
>>>
>>> Note that the server side only sends one line into socket.
>>>
>>> I later wrote a server in Java and a client in Go. They work fine in both read and write.
>>> import java.io.BufferedReader;
>>> import java.io.BufferedWriter;
>>> import java.io.IOException;
>>> import java.io.InputStreamReader;
>>> import java.io.OutputStreamWriter;
>>> import java.io.PrintWriter;
>>> import java.net.Socket;
>>> import java.net.UnknownHostException;
>>>
>>> public class DeserializerTester {
>>> public static void main(String[] args) throws IOException {
>>> // TODO Auto-generated method stub
>>> Socket s = null;
>>> BufferedReader in = null;
>>> BufferedWriter out = null;
>>> //PrintWriter out = null;
>>>
>>> try {
>>> s = new Socket("127.0.0.1", 9999);
>>> in = new BufferedReader(new InputStreamReader(s.getInputStream()));
>>> //out = new PrintWriter(s.getOutputStream(), false);
>>> out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
>>> } catch (UnknownHostException e) {
>>> System.err.println("Unknown host");
>>> System.exit(0);
>>> } catch (IOException e) {
>>> System.err.println("IO error");
>>> System.exit(1);
>>> }
>>>
>>> String msg = "";
>>>
>>> msg = in.readLine();
>>> System.out.println(msg);
>>>
>>> out.write("\"hi, socket\"");
>>>>> import java.io.BufferedWriter;
>>> import java.io.IOException;
>>> import java.io.InputStreamReader;
>>> import java.io.OutputStreamWriter;
>>> import java.io.PrintWriter;
>>> import java.net.Socket;
>>> import java.net.UnknownHostException;
>>>
>>> public class DeserializerTester {
>>> public static void main(String[] args) throws IOException {
>>> // TODO Auto-generated method stub
>>> Socket s = null;
>>> BufferedReader in = null;
>>> BufferedWriter out = null;
>>> //PrintWriter out = null;
>>>
>>> try {
>>> s = new Socket("127.0.0.1", 9999);
>>> in = new BufferedReader(new InputStreamReader(s.getInputStream()));
>>> //out = new PrintWriter(s.getOutputStream(), false);
>>> out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
>>> } catch (UnknownHostException e) {
>>> System.err.println("Unknown host");
>>> System.exit(0);
>>> } catch (IOException e) {
>>> System.err.println("IO error");
>>> System.exit(1);
>>> }
>>>
>>> String msg = "";
>>>
>>> msg = in.readLine();
>>> System.out.println(msg);
>>>
>>> out.write("\"hi, socket\"");
>> Try:
>>
>> out.flush();
>>
>> here.
>>
>>> s.close();
>>> }
>>>
>>> }
>>>>> }
>>>
>>> }
>> Arne
Previous Thread: [Windows] Any way to distinguish ^C Induced EOF from ^Z EOF?
Next Thread: What are the proper terms for these concepts?
Related Forum Topics
- Datagram socket problem
- Strange Socket problem
- Strange Socket Problem Solved!
- Detection of socket connecting process, two thread problem
- I need to write Simple JAVA program to read and write from USB serialto use it with Arduino
- Setting TCP parameters for Socket?
- Detecting Socket disconnect
- Which is best java library for socket programming
- Java (android) socket reconnection
- Append() vs. write()