网络编程

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

}

}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容