目录
1.例子:客户端发送信息给服务器,服务器接收来自客户端的信息
1.例子:客户端发送信息给服务器,服务器接收来自客户端的信息
客户端输出流 服务器输入流
服务器端代码
package com.gongsi.cn.ch1;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
//服务器读入客户端传过来的信息
public class Server {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket=new ServerSocket(8999);//服务器端的快递点
System.out.println("服务器已经启动,监听端口号是:8999");
//1.跟客户端建立链接 socket 客户端的快递点
Socket socket=serverSocket.accept();
//2.打开socket的相关输入流
//OutputStream out=socket.getOutputStream();
InputStream in= socket.getInputStream();
//3.读取数据
//乱码处理流
InputStreamReader isr=new InputStreamReader(in);
//提高读取速度
BufferedReader br=new BufferedReader(isr);
String strs;
while ((strs=br.readLine())!=null) {
System.out.println("服务器接收到客户端的信息是:"+strs);
}
socket.shutdownInput();
// //3.写出信息到网络
// OutputStreamWriter writer=new OutputStreamWriter(out);
// BufferedWriter bw=new BufferedWriter(writer);
// bw.write("Hello,Client");
// bw.flush();//把残余的数据全部倒出
//4.关资源
// bw.close();
// writer.close();
// out.close();
br.close();
isr.close();
in.close();
socket.close();
serverSocket.close();
}
}
客户端代码
package com.gongsi.cn.ch1;
//客户端
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.nio.channels.ShutdownChannelGroupException;
public class Client {
public static void main(String[] args) throws Exception, IOException {
//1.建立跟服务器链接
Socket socket=new Socket("localhost", 8999);
//2.通过socket得到输出流
OutputStream out=socket.getOutputStream();
//3.写出信息到网络
//处理乱码
OutputStreamWriter writer=new OutputStreamWriter(out);
//提高读取速度
BufferedWriter bw=new BufferedWriter(writer);
bw.write("Hello,Server");
bw.flush();//把残余的数据全部倒出
//socket.shutdownOutput();
//4.关资源
bw.close();
writer.close();
out.close();
socket.close();
}
}
2.例子:客户端服务器相互发送,相互接收
客户端输入流输出流 服务器输入流输出流
服务器端
package com.gongsi.cn.ch1;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
//服务器读入客户端传过来的信息
public class Server {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket=new ServerSocket(8999);//服务器端的快递点
System.out.println("服务器已经启动,监听端口号是:8999");
//1.跟客户端建立链接 socket 客户端的快递点
Socket socket=serverSocket.accept();
//2.打开socket的相关输入流
OutputStream out=socket.getOutputStream();
InputStream in= socket.getInputStream();
//3.读取数据
//乱码处理流
InputStreamReader isr=new InputStreamReader(in);
//提高读取速度
BufferedReader br=new BufferedReader(isr);
String strs;
while ((strs=br.readLine())!=null) {
System.out.println("服务器接收到客户端的信息是:"+strs);
}
socket.shutdownInput();
//3.写出信息到网络
OutputStreamWriter writer=new OutputStreamWriter(out);
BufferedWriter bw=new BufferedWriter(writer);
bw.write("Hello,Client");
bw.flush();//把残余的数据全部倒出
//4.关资源
bw.close();
writer.close();
out.close();
br.close();
isr.close();
in.close();
socket.close();
serverSocket.close();
}
}
客户端
package com.gongsi.cn.ch1;
//客户端
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.nio.channels.ShutdownChannelGroupException;
public class Client {
public static void main(String[] args) throws Exception, IOException {
//1.建立跟服务器链接
Socket socket=new Socket("localhost", 8999);
//2.通过socket得到输出流
OutputStream out=socket.getOutputStream();
InputStream in=socket.getInputStream();
//3.写出信息到网络
//处理乱码
OutputStreamWriter writer=new OutputStreamWriter(out);
//提高读取速度
BufferedWriter bw=new BufferedWriter(writer);
bw.write("Hello,Server");
bw.flush();//把残余的数据全部倒出
socket.shutdownOutput();
//3.读入信息
InputStreamReader reader=new InputStreamReader(in);
BufferedReader br=new BufferedReader(reader);
String str;
if ((str=br.readLine())!=null) {
System.out.println("客户端接收到服务器的信息是:"+str);
}
//4.关资源
br.close();
reader.close();
bw.close();
writer.close();
out.close();
socket.close();
}
}
注意:先运行服务器端的程序,再运行客户端的程序。点击这里可以查看切换控制台的输出
3.例子 用户登录。
在客户端输入用户名和密码,服务器端模拟数据库进行判断。当客户端传入的值与服务器规定的值相等是,在客户端输出登录成功,否则登录失败。用对象输入流输出流,以及序列化反序列化。还有一点要注意的是,服务器端和客户端在不同的两个项目中,但是他们的包名位置要相同。
User.java
package com.gongsi.cn.ch2;
import java.io.Serializable;
public class User implements Serializable{
private String name;
private String password;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public User(String name, String password) {
super();
this.name = name;
this.password = password;
}
public User() {
super();
}
}
Client.java
package com.gongsi.cn.ch2;
//客户端
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.nio.channels.ShutdownChannelGroupException;
import java.util.Scanner;
public class Client {
public static void main(String[] args) throws Exception, IOException {
//1.建立跟服务器链接
Socket socket=new Socket("192.168.92.27", 9999);
//2.通过socket得到输出流,输入流
OutputStream out=socket.getOutputStream();
InputStream in= socket.getInputStream();
ObjectOutputStream oos=new ObjectOutputStream(out);
User user=new User();
Scanner input=new Scanner(System.in);
System.out.println("请输入用户名:");
user.setName(input.next());
System.out.println("请输入密码:");
user.setPassword(input.next());
//3.写出信息到网络
oos.writeObject(user);
oos.flush();//把残余的数据全部倒出
socket.shutdownOutput();
//3.读取数据
//乱码处理流
InputStreamReader isr=new InputStreamReader(in);
//提高读取速度
BufferedReader br=new BufferedReader(isr);
String strs;
while ((strs=br.readLine())!=null) {
System.out.println("客户端接收到服务器的信息是:"+strs);
}
//4.关资源
oos.close();
br.close();
isr.close();
in.close();
out.close();
socket.close();
}
}
Server.java
package com.gongsi.cn.ch2;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
//服务器读入客户端传过来的信息
public class Server {
public static void main(String[] args) throws IOException, Exception {
ServerSocket serverSocket=new ServerSocket(9999);//服务器端的快递点
System.out.println("服务器已经启动,监听端口号是:9999");
//1.跟客户端建立链接 socket 客户端的快递点
Socket socket=serverSocket.accept();
//2.打开socket的相关输入流
OutputStream out=socket.getOutputStream();
InputStream in= socket.getInputStream();
//3.从网络 读入 数据
ObjectInputStream ois=new ObjectInputStream(in);
User user=(User) ois.readObject();
System.out.println("服务器接收到客户端的数据:用户名"+user.getName()+"\t"+"密码是:"+user.getPassword());
//3.写出信息到网络
OutputStreamWriter writer=new OutputStreamWriter(out);
BufferedWriter bw=new BufferedWriter(writer);
if (user.getName().equals("张三")&&user.getPassword().equals("111")) {
bw.write("登录成功");
bw.flush();//把残余的数据全部倒出
}else {
bw.write("登录失败");
bw.flush();//把残余的数据全部倒出
}
//4.关资源
bw.close();
writer.close();
ois.close();
out.close();
in.close();
socket.close();
serverSocket.close();
}
}