package net;
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;
/**
* Socket网络编程之服务器
* @author gaofuzhi
*/
public class LoginServicer {
public static void main(String[] args) throws IOException {
System.out.println("服务器已启动!");
//创建ServerSocket对象
ServerSocket server = new ServerSocket(8988);
//判断客户端与服务端是否正常连接
Socket socket = server.accept();
//通过Socket对象获得输入输出流
InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();
//字符输入输出流
BufferedReader br = new BufferedReader(new InputStreamReader(is));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
String string = null;
StringBuffer sb = new StringBuffer();
while((string = br.readLine())!=null){
sb.append(string);
}
System.out.println("从客户端获取的数据:"+sb.toString());
bw.write("恭喜您访问服务器成功!");
//清除缓存区
bw.flush();
//释放资源
bw.close();
br.close();
os.close();
is.close();
socket.close();
server.close();
//结果如下:
//服务器已启动!
//从客户端获取的数据:用户名为:lily;密码为:123456
}
}
package net;
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;
/**
* Socket网络编程之客户端
* @author gaofuzh
*/
public class LoginClient {
public static void main(String[] args) throws IOException {
System.out.println("客户端已启动!");
//创建Socket对象
Socket socket = new Socket("127.0.0.1", 8988);
//通过Scoket对象获得输出输入流对象
OutputStream os = socket.getOutputStream();
InputStream is = socket.getInputStream();
//字符转换输出输入流
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
BufferedReader br = new BufferedReader(new InputStreamReader(is));
bw.write("用户名为:lily;密码为:123456");
//清除缓存区
bw.flush();
//关闭Socket输出通道,代表输出结束,不至于双方都进入等待状态
socket.shutdownOutput();
String string = null;
StringBuffer sb = new StringBuffer();
while((string = br.readLine())!= null){
sb.append(string);
}
System.out.println("从服务器获取的数据:"+sb.toString());
br.close();
bw.close();
is.close();
os.close();
socket.close();
//结果如下:
//客户端已启动!
//从服务器获取的数据:恭喜您访问服务器成功!
}
}
Socket网络编程之客户端之升级版(序列化与反序列化)(对象输入输出流)
package net;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;
/**
* Socket网络编程之客户端之升级版(序列化与反序列化)(对象输入输出流)
* @author gaofuzh
*/
public class LoginClient {
public static void main(String[] args) throws IOException {
System.out.println("客户端已启动!");
Scanner input = new Scanner(System.in);
System.out.println("请输入用户名:");
String name = input.next();
System.out.println("请输入密码:");
String pwd = input.next();
User user = new User(name,pwd);
//创建Socket对象
Socket socket = new Socket("127.0.0.1", 8988);
//通过Scoket对象获得输出输入流对象
OutputStream os = socket.getOutputStream();
InputStream is = socket.getInputStream();
//创建对象输出流
ObjectOutputStream ois = new ObjectOutputStream(os);
//字符转换输入流
BufferedReader br = new BufferedReader(new InputStreamReader(is));
ois.writeObject(user);
//清除缓存区
ois.flush();
//关闭Socket输出通道,代表输出结束,不至于双方都进入等待状态
socket.shutdownOutput();
String string = null;
StringBuffer sb = new StringBuffer();
while((string = br.readLine())!= null){
sb.append(string);
}
System.out.println("从服务器获取的数据:"+sb.toString());
br.close();
ois.close();
is.close();
os.close();
socket.close();
input.close();
/*结果如下:
客户端已启动!
请输入用户名:
lily
请输入密码:
123
从服务器获取的数据:恭喜lily访问服务器成功!
*/
}
}
package net;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
/**
* Socket网络编程之服务器之升级版(序列化与反序列化)(对象输入输出流)
* @author gaofuzhi
*/
public class LoginServicer {
public static void main(String[] args) throws IOException, ClassNotFoundException {
System.out.println("服务器已启动!");
//创建ServerSocket对象
ServerSocket server = new ServerSocket(8988);
//判断客户端与服务端是否正常连接
Socket socket = server.accept();
//通过Socket对象获得输入输出流
InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();
//字符输入输出流
ObjectInputStream ois = new ObjectInputStream(is);
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
User user = (User)ois.readObject();
System.out.println("登录名为:"+user.getName()+" 密码为:"+user.getPwd());
bw.write("恭喜"+user.getName()+"访问服务器成功!");
//清除缓存区
bw.flush();
//释放资源
bw.close();
ois.close();
os.close();
is.close();
socket.close();
server.close();
//结果如下:
//服务器已启动!
//登录名为:lily 密码为:123
}
}
package net;
import java.io.Serializable;
public class User implements Serializable{
private static final long serialVersionUID = 1L;
private String name;
private String pwd;
public User() {
super();
}
public User(String name, String pwd) {
super();
this.name = name;
this.pwd = pwd;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
}
package net;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketAddress;
import java.util.Scanner;
public class Client {
public static void main(String[] args) throws IOException {
while(true){
Scanner input = new Scanner(System.in);
System.out.print("顾客:");
String message = input.next();
//获取本地地址
InetAddress ia = InetAddress.getLocalHost();
//打包信息到指定地址
//相当于仓库与配送中心
DatagramPacket dp = new DatagramPacket(message.getBytes(), message.getBytes().length,ia,8989);
//DatagramSocket相当于运输车
DatagramSocket ds = new DatagramSocket();
//发送信息
ds.send(dp);
//接收业务员的信息
SocketAddress sa = dp.getSocketAddress();
byte[] bytes = new byte[2048];
DatagramPacket dp2 = new DatagramPacket(bytes, bytes.length,sa);
ds.receive(dp2);
String string = new String(dp2.getData(), 0, dp2.getData().length);
System.out.println("业务员:"+string);
//释放资源
ds.close();
}
}
}
package net;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketAddress;
import java.util.Scanner;
public class Reciver {
public static void main(String[] args) throws IOException {
System.out.println("业务员:欢迎您的咨询!");
while(true){
byte[] bytes = new byte[2048];
DatagramPacket dp = new DatagramPacket(bytes, bytes.length);
DatagramSocket ds = new DatagramSocket(8989);
ds.receive(dp);
String string = new String(dp.getData(), 0, dp.getData().length);
System.out.println("顾客:"+string);
//发送响应信息
Scanner input = new Scanner(System.in);
//System.out.println("请输入咨询信息:");
System.out.print("业务员:");
String message = input.next();
//打包信息
SocketAddress sa = dp.getSocketAddress();
DatagramPacket dp2 = new DatagramPacket(message.getBytes(), message.getBytes().length,sa);
//发送信息
ds.send(dp2);
//释放资源
//input.close();
ds.close();
}
}
}