首先是客户端代码:
客户端编程主要使用Socket类,使用Scanner扫描流读取和PrintStream打印流输出进行操作,
构造方法: public Socket(String host,int port)throws UnKnownHostException
主要使用文件操作:输入数据: System.in 得到输入数据: getInputStream(),输出字符串: getOutputStream()
使用: public boolean hasNext(); 判断是否有指定数据,public String next():取出输入的数据
import java.io.PrintStream;
import java.net.Socket;
import java.util.Scanner;
public class Client_Demo {
public static void main(String[] args) throws Exception {
//设置地址端口
Socket client = new Socket("127.0.0.2", 8888);
Scanner input = new Scanner(System.in);
//scan对象传入输入方法
Scanner scan = new Scanner(client.getInputStream());
//使用输出流打印
PrintStream out = new PrintStream(client.getOutputStream());
input.useDelimiter("\n"); //使用换行符表示输入完成
scan.useDelimiter("\n"); //将换行符之前的数据读取
//设置标志,根据输入的条件判断是否结束循环
boolean flag = true;
while (flag) {
System.out.println("输入发送的信息");
if (input.hasNext()) {
//使用next()读取str字符串
String str = input.next().trim();
out.println(str);
if (str.equalsIgnoreCase("bye")) {
flag = false;
}
//扫描流对象读取的字符串
if (scan.hasNext()) {
System.out.println(scan.next());
}
}
}
input.close();
out.close();
scan.close();
}
}
以下为服务器代码:
使用多线程实现服务器回应客户端: 支持多个客户端向服务器访问
首先与客户端连接: private Socket client; 使用Thread类的构造方法和
ServerSocket server = new ServerSocket(8888); 完成连接
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
class Demo_Thread implements Runnable {
private Socket client;
public Demo_Thread(Socket client) {
this.client = client;
}
@Override
public void run() {
try {
Scanner scan = new Scanner(client.getInputStream());
PrintStream out = new PrintStream(client.getOutputStream());
boolean flag = true;
while (flag) {
if (scan.hasNext()) {
//如果接收的方法是bye,结束循环
String str = scan.next().trim();
if (str.equalsIgnoreCase("bye")) {
out.println("结束");
flag = false;
} else {
//以下为接收的str,调用equalsIgnoreCase()方法判断字符串内容
if (str.equalsIgnoreCase("你好")) {
out.println("你好!");
} else if (str.equalsIgnoreCase("吃过饭了吗")) {
out.println("吃啦!");
} else if (str.equalsIgnoreCase("你是机器人吗")) {
out.println("你才是机器人的");
} else if (str.equalsIgnoreCase("你喜欢我吗")) {
out.println("人家才不喜欢你");
} else if (str.equalsIgnoreCase("今天天气怎么样?")) {
out.println("天气很好啊");
} else {
out.println("嗯。。。");
}
}
}
}
scan.close();
out.close();
client.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
public class Demo_Server {
public static void main(String[] args) throws Exception {
ServerSocket server = new ServerSocket(8888);
boolean flag = true;
while (flag) {
//初始化服务器接收方法与客户端进行Socekt通信
Socket client = server.accept();
//开启和客户端的通信,使用向上转型创建线程对象并启动
new Thread(new Demo_Thread(client)).start();
}
server.close(); //最后需要关闭服务器
}
}
可以打开多个client类,一起和服务器进行简单的通信