我是Java编程的初学者,我必须实现一个使用套接字的项目。我试图从客户端获取数据以进行连接,但我被困在从DAtaInputStream读取数据的过程中。我不知道为什么run方法会在"op=din.readInt()“行中停止执行。
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());
}
}
}发布于 2021-04-05 01:33:56
din.readInt();是一个阻塞操作,这意味着执行该方法的线程将停止,直到它获得要读取的数据。
发布于 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是一种无连接协议,在某些情况下非常有效,因为我们不需要每个数据包都到达其目的地,例如媒体流。
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);}
}
} https://stackoverflow.com/questions/66944017
复制相似问题