首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Socket java编程

Socket java编程
EN

Stack Overflow用户
提问于 2021-04-05 01:28:59
回答 2查看 56关注 0票数 0

我是Java编程的初学者,我必须实现一个使用套接字的项目。我试图从客户端获取数据以进行连接,但我被困在从DAtaInputStream读取数据的过程中。我不知道为什么run方法会在"op=din.readInt()“行中停止执行。

代码语言:javascript
运行
复制
public class ServerWorker extends Thread {

    public final Socket clientSocket;
    Server s;
    BDClass con;
    boolean stillConnecting = true;
    Thread runner;

    public ServerWorker(Server s, Socket clientSocket) throws ClassNotFoundException {
        this.con = new BDClass();
        this.clientSocket = clientSocket;
        this.s = s;
        this.runner = new Thread(this);
        this.runner.start();

    }

    public boolean login(String nom, String pass) throws SQLException, IOException {
        ResultSet User;
        if (nom != "" && pass != "") {
            if (con.Authentifier(nom, pass)) {
                User = con.TrouverUtilisateur(nom);
                new ProfilFenetre(con.getFriends(User.getInt(1)), User).setVisible(true);
                return true;
            } else {
                return false;
            }
        } else {
            return false;
        }

    }

    @Override
    public void run() {
        DataInputStream din;
        DataOutputStream dout;
        int  op = 0;
        ConnexionFenetre f;
        try {

            f = new ConnexionFenetre(s, clientSocket);
            f.setVisible(true);

            System.out.print("viide");
            while (true) {

                try {
                    if (true) {
                        din = new DataInputStream(clientSocket.getInputStream());
                        dout = new DataOutputStream(clientSocket.getOutputStream());

                        op = din.readInt();

                        System.out.print(op);

                        switch (op) {
                            case 0: {
                                System.out.println("no request");
                                break;
                            }
                            case 1: {
                                DataInputStream din1 = new DataInputStream(clientSocket.getInputStream());
                                DataInputStream din2 = new DataInputStream(clientSocket.getInputStream());
                                System.out.print(din1.readUTF() + "  llll  " + din2.readUTF());
                                if (this.login(din1.readUTF(), din2.readUTF())) {
                                    f.dispose();
                                    dout.writeUTF("you are connected!!");
                                } else {
                                    dout.writeUTF("mot de passe ou username faux!!");
                                }
                                break;
                            }

                            default: {

                            }

                        }
                    }
                } catch (IOException e) {
                    System.err.print(e.getMessage());
                } catch (SQLException ex) {
                    System.err.print(ex.getMessage());
                    Logger.getLogger(ServerWorker.class.getName()).log(Level.SEVERE, null, ex);
                }

            }
        } catch (IOException ex) {
            Logger.getLogger(ServerWorker.class.getName()).log(Level.SEVERE, null, ex);
            System.err.print(ex.getMessage());
        }

    }
}
EN

回答 2

Stack Overflow用户

发布于 2021-04-05 01:33:56

代码语言:javascript
运行
复制
din.readInt();

是一个阻塞操作,这意味着执行该方法的线程将停止,直到它获得要读取的数据。

票数 2
EN

Stack Overflow用户

发布于 2021-04-24 15:04:44

Socket java编程用于Java Runtime Environment(JRE)不同平台上的应用程序之间的通信。

它是java编程,可以进行面向连接或无连接的通信。

Socket用于DatagramPacket,DatagramSocket和面向连接的socket编程类用于无连接的socketjava编程。

网络通信出现在传输控制协议(TCP)和用户数据报协议(UDP)中。TCP和UDP都有其独特的方式,其用途也各不相同。

网络通信有两种类型:

1)。TCP是一种简单而可靠的协议,它使客户端能够与服务器建立连接,并使两个系统能够通信。传输控制协议每个实体都知道它的通信负载已经从服务器收到。

2)。UDP是一种无连接协议,在某些情况下非常有效,因为我们不需要每个数据包都到达其目的地,例如媒体流。

代码语言:javascript
运行
复制
import java.net.*;  
import java.io.*;  

public class ServerData {  
    
public static void main(String[] args){  
    
    try{  
    ServerSocket ss=new ServerSocket(3000);  
    Socket s=ss.accept();//connection orientation   
    DataInputStream dis=new DataInputStream(s.getInputStream());  
    String  str=(String)dis.readUTF();  
    System.out.println("message= "+str);  
    ss.close();  
    }catch(Exception e){
        System.out.println(e);}  
    }  
} 
    
import java.net.*;  
import java.io.*;  

public class UserData { 
    
public static void main(String[] args) {  
    try{      
    Socket s=new Socket("localhost",3000);  
    DataOutputStream dout=new DataOutputStream(s.getOutputStream());  
    dout.writeUTF("Hello Server Data");  
    dout.flush();  
    dout.close();  
    s.close();  
    }catch(Exception e){
        System.out.println(e);}  
    }  
} 
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66944017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档