30/09/2018, 18:36

Lỗi dấu () và {}

Xin mọi người cho em hỏi em có code:

    package DoAn1;
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.ServerSocket;
import java.net.Socket;
public class TCPEchoServer {
	public final static int DEFAULT_PORT = 5000;
	public static void main(String[] args) {
	try(ServerSocket servSocket = new ServerSocket(DEFAULT_PORT)){
	while (true){
	Socket connSocket = servSocket.accept();
	System.out.println("Accepted client:" + 
	connSocket.getInetAddress().getHostAddress());
	try(BufferedReader in = new BufferedReader(new 
	InputStreamReader(connSocket.getInputStream()));
	PrintWriter out = new PrintWriter(new 
	OutputStreamWriter(connSocket.getOutputStream()))
	){
		String message;
		while((message = in.readLine()) != null){
		System.out.println("Receive from client:" 
		+ message);
		out.println(message);
		out.flush();
		}
		System.out.println("Client has stopped sending data!");
		}
	catch (IOException e){
		System.out.println(e.getMessage());
		}
		}
		}
	catch (IOException e){
		System.out.println(e.getMessage());
		}
		}
		}
	


không hiểu sao chương trình lại báo lỗi một số chỗ ngoặc () và {} sai như hình dưới ạ.

Xin mọi người giả thích hộ em tại sao lại có lỗi này với ạ! Em xin cảm ơn.

Đỗ Trung Quân viết 20:45 ngày 30/09/2018

Xin mọi người giả thích hộ em tại sao lại có lỗi này với ạ! Em xin cảm ơn

Xem lại phiên bản JDK >=7

#Format code giúp bạn:
package DoAn1;

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.ServerSocket;
import java.net.Socket;

public class TCPEchoServer {
    public final static int DEFAULT_PORT = 5000;
    public static void main(String[] args) {
        try(ServerSocket servSocket = new ServerSocket(DEFAULT_PORT)){ // try chứ không phải là try()
            while (true){
                Socket connSocket = servSocket.accept();
                System.out.println("Accepted client:" + 
                connSocket.getInetAddress().getHostAddress());
                try(BufferedReader in = new BufferedReader(new 
                    InputStreamReader(connSocket.getInputStream()));
                    PrintWriter out = new PrintWriter(new 
                    OutputStreamWriter(connSocket.getOutputStream()))){
                    String message;
                    while((message = in.readLine()) != null){
                        System.out.println("Receive from client:" + message);
                        out.println(message);
                        out.flush();
                    }
                    System.out.println("Client has stopped sending data!");
                }catch (IOException e){
                    System.out.println(e.getMessage());
                }
            }
        }catch (IOException e){
            System.out.println(e.getMessage());
        }
    }
}

#Dễ thấy rằng cách để giúp đỡ người trả lời là phải tự format được code của mình:
package DoAn1;

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.ServerSocket;
import java.net.Socket;

public class TCPEchoServer {
    public final static int DEFAULT_PORT = 5000;
    public static void main(String[] args) {
        try(){
            ServerSocket servSocket = new ServerSocket(DEFAULT_PORT);
            while (true){
                Socket connSocket = servSocket.accept();
                System.out.println("Accepted client:" + connSocket.getInetAddress().getHostAddress());
                try(){
                    BufferedReader in = new BufferedReader(new InputStreamReader(connSocket.getInputStream()));
                    PrintWriter out = new PrintWriter(new OutputStreamWriter(connSocket.getOutputStream()));
                    String message;
                    while((message = in.readLine()) != null){
                        System.out.println("Receive from client:" + message);
                        out.println(message);
                        out.flush();
                    }
                    System.out.println("Client has stopped sending data!");
                }catch (IOException e){
                    System.out.println(e.getMessage());
                }
            }
        }catch (IOException e){
            System.out.println(e.getMessage());
        }
    }
}

#Đấy là cách sửa code cho bạn thấy bạn chưa chắc kiến thức về try và format code tuy nhiên cách triển khai code như vậy vẫn chưa tốt.
###Hai vòng try lồng nhau bắt cùng 1 exception gây lãng phí tài nguyên vô cùng. Nguyên tắc là càng ít dùng try càng tốt. Lồng vào nhau thì vạn lần không tốt.
###Get message không cho bạn nhiều thông tin lắm printStackTrace tốt hơn. Vì message là do mình đưa vào khi new Exception. Các exception base thì phải kiểm soát rất nhiều bài toán nên báo lỗi chung chung giống hệt stack trace được print ra hoặc không có báo lỗi. Chỉ có những cái exception customize thì mình mới in message thôi. Và dù dùng message cũng vẫn printStackTrace để có nhiều thông tin hơn.
###getInetAddress() là một nullable method mà bạn không những không thèm check null mà còn cho nó vào one line code thì debug làm sao?
###Bạn không đóng kết nối lại àh?
###Bao giờ thì cái while thứ nhất mới kết thúc?

public class TCPEchoServer {
    public final static int DEFAULT_PORT = 5000;
    public static void main(String[] args) {
        ServerSocket servSocket;
        BufferedReader in;
        PrintWriter out;
        try(){
            servSocket = new ServerSocket(DEFAULT_PORT);
            while (true){ // Ket thuc o dau cho hop li bay gio?
                Socket connSocket = servSocket.accept();
                InetAddress inetAddress = connSocket.getInetAddress();
                if(inetAddress == null){
                    // Lam gi thi lam
                }

                System.out.println("Accepted client:" + String.valueOf(inetAddress.getHostAddress()));

                in = new BufferedReader(new InputStreamReader(connSocket.getInputStream()));
                out = new PrintWriter(new OutputStreamWriter(connSocket.getOutputStream()));

                String message;
                while((message = in.readLine()) != null){
                    System.out.println("Receive from client:" + message);
                    out.println(message);
                    out.flush();
                }

                System.out.println("Client has stopped sending data!");
            }
        }catch (IOException e){
            e.printStackTrace();
        }finally{
            if (out != null) {
                try{
                    out.close();
                } catch (RuntimeException rethrown) {
                    throw rethrown;
                } catch (Exception ignored) {
                    ignored.printStackTrace();
                }
            }

            if (in != null) {
                try{
                    in.close();
                } catch (RuntimeException rethrown) {
                    throw rethrown;
                } catch (Exception ignored) {
                    ignored.printStackTrace();
                }
            }

            if (servSocket != null) {
                try{
                    servSocket.close();
                } catch (RuntimeException rethrown) {
                    throw rethrown;
                } catch (Exception ignored) {
                    ignored.printStackTrace();
                }
            }
        }
    }
}
Bảo Ngọc viết 20:53 ngày 30/09/2018

cảm ơn anh rất nhiều đã nhiệt tình chỉ giúp em ạ.

Bài liên quan
0