JAVA 网络编程

目录

​ 

 1.例子:客户端发送信息给服务器,服务器接收来自客户端的信息

2.例子:客户端服务器相互发送,相互接收

 3.例子 用户登录。


 

 

 

 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();
	}

}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值