Java中使用ServerSocket和Socket的多线程示例
开始...
1、服务器端:
创新互联主要从事网站制作、网站设计、网页设计、企业做网站、公司建网站等业务。立足成都服务龙港,10余年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18980820575
public class ServerSocketApp {
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(9999);
System.out.println("服务已启动");
while (true) {
Socket socket = serverSocket.accept();
System.out.println("客户" + socket.getInetAddress().getHostAddress() + "来访,");
new Thread(() -> {
try {
InputStream inputStream = socket.getInputStream();
PrintStream printStream = new PrintStream(socket.getOutputStream());
Scanner in = new Scanner(inputStream);
in.useDelimiter("\n");
while (in.hasNext()) {
String message = in.next().trim();
if (message.equalsIgnoreCase("bye")) {
String bye = new String("客户端已退出,拜拜".getBytes("UTF-8"));
System.out.println(bye);
printStream.println(bye);
} else {
printStream.println("ECHO>" + message);
}
}
} catch (IOException e) {
e.printStackTrace();
}
}).start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
2、客户端程序:
public class ClientSocketApp {
public static void main(String[] args) throws IOException {
Socket socket = new Socket("localhost", 9999);
Scanner in = new Scanner(System.in);
Scanner inputStream = new Scanner(socket.getInputStream());
PrintStream printStream = new PrintStream(socket.getOutputStream());
in.useDelimiter("\n");
inputStream.useDelimiter("\n");
boolean b = true;
System.out.println("请输入:");
while (b) {
if (in.hasNext()) {
String message = in.next().trim();
printStream.println(message);
if (inputStream.hasNext()) {
String serverMessage = new String(inputStream.next().trim().getBytes("UTF-8"));
System.out.println(serverMessage);
}
if (message.equalsIgnoreCase("bye")) {
b = false;
}
}
}
socket.close();
}
}
3、运行
服务器
cd com/kyy/bases/socket 运行javac ServerSocketApp.java
cd classpath根目录 运行java ServerSocketApp
服务器端启动
客户端
cd com/kyy/bases/socket 运行javac ClientSocketApp.java
cd classpath根目录 运行java ClientSocketApp
遇到的问题:
如果不通过eclipse、Idea等工具,会出现 “找不到或无法加载主类 com.kyy.bases.socket.ClientSocketApp”的异常
解决办法,设置classpath=.;"JAVA_HOME"/lib
或者在cmd窗口临时设置set classpath=.;
...结束
分享文章:Java中使用ServerSocket和Socket的多线程示例
文章来源:http://pwwzsj.com/article/gdepce.html