30/09/2018, 18:40

Code của server-Client

Em có code server bên dưới, em không hiểu sao khi Client gửi dữ liệu đến Server, theo em nghĩ Server xử lý hiển thị dữ liệu xong nó phải chạy đoạn output.println("abc"); và hiển thị lại cho Client là abc chứ tại sao lại không thấy nó gửi lại Client abc ạ? Xin anh chị giải thích hộ em với ạ!

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package javaapplication1.Server;

/**
 *
 * @author As
 */
   //chuyen String sang char
   //chuyen String sang char
import java.net.*;
import java.util.*;
import java.io.*;

public class Server
{
    public static void main(String[] args)
    {
        new Server();
    }
     
    public Server() 
    {
        //Tao try-catch xu ly loi
        try {
            ServerSocket sSocket = new ServerSocket(8888);
            System.out.println("Server ready at: " + new Date());
             
            //tao luong cho ket noi tu client
            Socket socket = sSocket.accept();
             
            //tao luong du lieu
            PrintWriter output = new PrintWriter(socket.getOutputStream(), true);
            BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
             
            //Thong bao client da ket noi thanh cong
            output.println("You have connected at: " + new Date());
             
            //Vong lap lam viec Server
            while(true) {
                //Hien thi cac du lieu tu client gui den
            String chatInput = input.readLine();
                System.out.println(chatInput);
            output.println("abc");
            }
        } catch(IOException exception) {
            System.out.println("Error: " + exception);
        }
    }
}

Bên Client:
You have connected at: Thu Nov 05 10:01:48 ICT 2015
1
Bên Server:
Server ready at: Thu Nov 05 10:01:43 ICT 2015
1

... viết 20:50 ngày 30/09/2018

Bạn dùng PrintWriter thì nên dùng

void write(String s);
void write(char[] bytearray);
Bảo Ngọc viết 20:50 ngày 30/09/2018

Em chưa hiểu về các

PrintWriter và void write(String s);
void write(char[] bytearray);

lắm lên nghe anh nói vẫn hơi mơ hộ. Nhưng tạm thời anh cho em hỏi nếu em dùng
output.println("abc");
để gửi trả Client hiển thị abc thế có được không mà sao em thấy nó không chạy gì liên quan vào code đó thế ạ?

... viết 20:42 ngày 30/09/2018

Mình chạy code thấy có ghi ra abc bình thường nè bạn.

Mình kết nối bằng telnet.
Nếu bạn không kết nối bằng telnet mà kết nối bằng code Client, thì code đó phải kết nối với output stream của server, nghĩa là cũng phải mở port và nhận dữ liệu y như 1 server vậy.

Bảo Ngọc viết 20:44 ngày 30/09/2018

Đây là code Client ạ. Hình như nó cũng có mở port và nhận dữ liệu y như 1 server mà anh?

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package javaapplication1.Server;

/**
 *
 * @author As
 */
import java.io.*;
import java.net.*;
//We need a Scanner to receive input from the user
import java.util.Scanner;
 
public class Client
{
    public static void main(String[] args)
    {
        new Client();
    }
     
    public Client()
    {
    //We set up the scanner to receive user input
        Scanner scanner = new Scanner(System.in);
        try {
            Socket socket = new Socket("localhost",8888);
            PrintWriter output = new PrintWriter(socket.getOutputStream(), true);
            BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
             
            //This will wait for the server to send the string to the client saying a connection
            //has been made.
            String inputString = input.readLine();
            System.out.println(inputString);
            //Again, here is the code that will run the client, this will continue looking for 
            //input from the user then it will send that info to the server.
            while(true) {
                //Here we look for input from the user
                String userInput = scanner.nextLine();
                //Now we write it to the server
                output.println(userInput);
            }
        } catch (IOException exception) {
            System.out.println("Error: " + exception);
        }
    }
}
... viết 20:54 ngày 30/09/2018

Cái bạn dùng chỉ mới là Socket để gửi text đi thôi, lúc nhận dữ liệu thì client cũng đóng vai như 1 server, nên cũng cần 1 ServerSocket để nhận dữ liệu nữa. Nhưng vì bạn dùng vòng while để bắt input từ Client rồi, nên chương trình chạy đến ngang vòng while sẽ đứng yên đó.
Vì thế bạn cần tìm hiểu Thread trong java để đưa vòng while trong Client vào 1 Thread riêng, và việc lắng nghe kết nối vào 1 Thread khác, 2 Thread hoạt động độc lập mới đc.

Bảo Ngọc viết 20:50 ngày 30/09/2018

Anh có thể chỉ giúp em dùng cmd như trên không ạ? em viêt là


không được nốt

... viết 20:47 ngày 30/09/2018

bạn ghi

telnet 127.0.0.1 8888
Bảo Ngọc viết 20:46 ngày 30/09/2018

không được anh ạ nó hiện thế này ạ


anh có thể team cho em 1 phát được không ạ?

... viết 20:41 ngày 30/09/2018
telnet 127.0.0.1 8888

dấu cách giữa 127.0.0.1 và số 8888 chứ ko phải dấu chám.

Bạn cần mở chức năng telnet trước đã.

stackoverflow.com
Nikesh Devaki

Telnet is not recognized as internal or external command

tcp, windows-7
asked by Nikesh Devaki on 07:30AM - 30 Jul 14

Bảo Ngọc viết 20:48 ngày 30/09/2018

hihihi được rồi ạ. Em cảm ơn anh nhiều nha, có gì mong anh giúp đỡ ạ! Chúc anh một ngày vui vẻ!

Nguyễn Đức Thắng viết 20:53 ngày 30/09/2018

Có trang web nào để đẩy server code C # trên máy lên như Heroku thì code Py thôi

Bài liên quan
0