如何解决套接字java编程
我是 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,ex);
System.err.print(ex.getMessage());
}
}
}
解决方法
din.readInt();
是一个阻塞操作,这意味着执行该方法的线程将停止,直到它获得要读取的数据。
,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);}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。