作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 Java 初学者,我的任务是构建 P2p 文件共享 Java 应用程序。
我从创建服务器和客户端开始。客户端可以向服务器发送消息,服务器响应。我相信下一步应该是将 Thread 插入到服务器类中。我阅读了所有关于它的内容并尝试了它,但我无法将其拉下来。我希望有一个人可以帮助我。
这是服务器类:
import java.net.*;
import java.io.*;
import java.util.*;
public class Server {
private static ServerSocket serverskiSoket;
private final static int PORT = 3334;
public static void main(String[] args) {
System.out.println("Server se povezuje na port: "+PORT);
try {
serverskiSoket = new ServerSocket(PORT);
System.out.println("Server aktivan: " + serverskiSoket);
System.out.println("Ceka se klijent ...");
} catch (IOException ex) {
String dodatnaPoruka = ex.getMessage().toString();
if (dodatnaPoruka.equals("Address already in use: JVM_Bind"))
System.out.println("Nemoguce je povezati se na port "+ PORT +" jer je zauzet od strane drugog servera.");
System.exit(1);
}
do {
handleClient();
} while(true);
}
private static void handleClient() {
Socket link = null;
try {
link = serverskiSoket.accept();
System.out.println("Klijent povezan: " + link);
Scanner ulazniTok = new Scanner(link.getInputStream());
PrintWriter izlazniTok = new PrintWriter(link.getOutputStream(), true);
int brojPoruka = 0;
String poruka = ulazniTok.nextLine();
while(!poruka.equals("zatvori")) {
System.out.println("Klijent kaze: " + poruka);
brojPoruka++;
izlazniTok.println("Poruka: " + brojPoruka + ": " + poruka);
poruka = ulazniTok.nextLine();
}
izlazniTok.println(brojPoruka + " poruka poslato.");
} catch (IOException ex) {
ex.printStackTrace();
} finally {
try {
System.out.println("Konekcija se zatvara...");
link.close();
} catch(IOException ioEx) {
System.out.println("Diskonekcija nije moguca! \nRazlog: " + ioEx.getMessage());
System.exit(1);
}
}
}
}
import java.net.*;
import java.io.*;
import java.util.*;
public class Klijent {
private static InetAddress host;
private static final int PORT = 3334;
public static void main(String[] args) {
System.out.println("Povezivanje klijenta u toku. Molim sacekajte...");
try {
host = InetAddress.getLocalHost();
} catch (UnknownHostException ex) {
System.out.println("ID hosta nije pronadjen");
System.exit(1);
}
pristupiServeru();
}
private static void pristupiServeru() {
Socket link = null;
try {
link = new Socket(host, PORT);
String IPAdresa = StringCutter.RaseciString(host.toString());
System.out.println("Povezan na host cija je IP adresa: "+IPAdresa+", a port: "+PORT);
Scanner ulazniTok = new Scanner(link.getInputStream());
PrintWriter izlazniTok = new PrintWriter(link.getOutputStream(), true);
Scanner unosKorisnika = new Scanner(System.in);
String poruka, odgovor;
do {
System.out.println("Unesite poruku: ");
poruka = unosKorisnika.nextLine();
izlazniTok.println(poruka);
odgovor = ulazniTok.nextLine();
if (!odgovor.contains("primljeno"))
System.out.println("Rekli ste serveru: " + odgovor);
else System.out.println(odgovor);
} while (!poruka.equals("zatvori"));
} catch (IOException ex) {
ex.printStackTrace();
} finally {
try {
System.out.println("\n*Zatvara se konekcija sa serverom...*");
link.close();
} catch (IOException ex){
System.out.println("Diskonekcija je nemoguca");
System.exit(1);
}
}
}
}
最佳答案
这是一个非常简单的方法 - 我没有通读所有代码,所以测试它以确保它不会破坏任何东西。
private static void handleClient() {
new Thread() {
public void run() {
Socket link = null;
...
} catch(IOException ioEx) {
System.out.println("Diskonekcija nije moguca! \nRazlog: " + ioEx.getMessage());
System.exit(1);
}
} // end outer try
}.start() // end thread
}
Executors.newFixedThreadPool()
(
http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/Executors.html#newFixedThreadPool%28int%29 ) 用于池化。
关于java - 如何将线程添加到我的服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1960238/
我是一名优秀的程序员,十分优秀!