简体   繁体   中英

Sending Strings through Sockets

Here is the Server

public class SocketMsg {

    public static void main(String[] args) throws IOException{
    ServerSocket ss = new ServerSocket("number goes here");


    System.out.println("Server Ready");
    ss.accept();


    }
    }

Client:

public class SocketMesg {



public static void main(String[] args) throws IOException{
  Socket socket = null;
    OutputStreamWriter osw;
    String str = "Hello World";
    try {
        socket = new Socket("localhost", "number goes here");
        osw =new OutputStreamWriter(socket.getOutputStream());
        osw.write(str, 0, str.length());
    } catch (IOException e) {
        System.err.print(e);
    } 
    finally {
        socket.close();
    }

}

Personally, the code works but the strings are not sending to the other host, I gave them the same number, but it is not working. The client is sending it back to the server on the DOS window. Did I make a error? What did I do wrong?

Your server-side at least needs the following.

Socket clientSocket = serverSocket.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));


String inputLine;
while ((inputLine = in.readLine()) != null) {
    // process inputLine;
}

You need to flush outputstream to commit write buffer to the socket. Also be careful with charset if writing strings. This example explicitly uses UTF-8 through "low level" byte array buffer. I think you are practicing your first socket programming so I kept this very simple.

Server.java

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

public class Server {

    public static void main(String[] args) throws Exception {
        ServerSocket ss = new ServerSocket(1122);
        System.out.println("Server Ready");
        while(true) {
            Socket socket = ss.accept();
            InputStream is = socket.getInputStream();
            // client must send 1-10 bytes, no more in single command
            byte[] buf = new byte[10]; 
            int read = is.read(buf, 0, buf.length);
            String cmd = new String(buf, 0, read, "UTF-8");
            System.out.println(cmd);
            socket.close(); // we are done, this example reads input and then closes socket
        }
    }

}

Client.java

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

public class Client {

    public static void main(String[] args) throws Exception {
        Socket socket = null;
        // send max of 10 bytes to simplify this example
        String str = "ABCDEFGHIJ"; 
        try {
            socket = new Socket("localhost", 1122);
            OutputStream os = socket.getOutputStream();
            byte[] buf = str.getBytes("UTF-8");
            os.write(buf, 0, buf.length);
            os.flush();
        } catch (IOException ex) {
            System.err.print(ex);
        } finally {
            socket.close();
        }
    }

}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM