50,527
社区成员
发帖
与我相关
我的任务
分享
import java.io.*;
import java.net.*;
import java.util.Scanner;
class Receive implements Runnable
{
private Socket Read;
private DataInputStream input=null;
public Receive(Socket R) throws IOException
{
Read=R;
input=new DataInputStream(Read.getInputStream());
}
@Override
public void run()
{
String r;
try
{
while((r=input.readLine())!=null)
{
System.out.println(r);
}
}
catch (IOException e)
{
e.printStackTrace();
}
try
{
Read.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
public class Client
{
private Socket connection;
private PrintWriter output;
private DataInputStream input;
public void connect(InetAddress add) throws IOException
{
connection=new Socket(add,Server.port);
}
public void start() throws IOException
{
output=new PrintWriter(connection.getOutputStream());
input=new DataInputStream(connection.getInputStream());
Scanner s=new Scanner(System.in);
Receive receive=new Receive(connection);
Thread t=new Thread(receive);
t.start();
String send;
while(true)
{
send=s.nextLine();
output.write(send);
output.flush();
if(send.equals("end"))
break;
}
}
public static void main(String[] args) throws IOException
{
Client c=new Client();
c.connect(InetAddress.getLoopbackAddress());
c.start();
}
}
import java.io.*;
import java.net.*;
import java.util.ArrayList;
class ServerThread extends Thread
{
private Socket ThisSocket=null;
private PrintWriter output=null;
private DataInputStream input=null;
public ServerThread(Socket This) throws IOException
{
ThisSocket=This;
output=new PrintWriter(ThisSocket.getOutputStream());
input=new DataInputStream(ThisSocket.getInputStream());
}
public void run()
{
String recv;
try
{
while((recv=input.readLine())!=null)
{
System.out.println("客户端发来信息:"+recv);
output.write("服务器端已接受信息"+recv);
if(recv.equals("end"));
break;
}
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
try
{
input.close();
output.close();
Server.socketgroup.remove(ThisSocket);
ThisSocket.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
}
public class Server
{
private ServerSocket server;
public static ArrayList<Socket> socketgroup;
public static final int port=1920;
public Server() throws IOException
{
server=new ServerSocket(port);
socketgroup=new ArrayList<Socket>();
}
public void running() throws IOException
{
while(true)
{
Socket connection=server.accept();
socketgroup.add(connection);
new ServerThread(connection).start();
}
}
public static void main(String[] args) throws IOException
{
new Server().running();
}
}
public static void main(String[] args) throws IOException {
//开启服务器,并且端口为8888
ServerSocket server = new ServerSocket(8888);
System.out.println("开始监听");
//监听客户端
Socket client = server.accept();
//获取客户端对象流
//输出流
System.out.println(client);
ObjectOutputStream oos = new ObjectOutputStream(client.getOutputStream());
//输入流
ObjectInputStream ois = new ObjectInputStream(client.getInputStream());
//给客户端发送消息(1.这里是服务器先给客户端发送一个消息,消息的类型是字符串形式,这里注意类型
oos.writeObject("已连接");
//定义对象接收客户端信息
Object obj = null;
//开始接收
while ((obj = ois.read()) != null) {
4.服务器接收到了消息,然后判断,的确是这个类型,就正常执行,然后发送会去的也是Message类型了
if (obj instanceof Message) {
Message mes = (Message)obj;
//创建一个返回的信息
Message returnMessage = null;
switch (mes.messageStyle) {
case 0 :
//要返回的信息
returnMessage = new Message();
returnMessage.setMessage("请选择要办理的业务\n1.查询话费\n2.查询流量");
oos.writeObject(returnMessage);
break;
case 1 :
//要返回的信息
returnMessage = new Message();
returnMessage.setMessage("你的话费余额是:300\n1.查询话费\n2.查询流量");
oos.writeObject(returnMessage);
break;
}
客户端:
public static void main(String[] args) throws UnknownHostException, IOException, ClassNotFoundException {
//关联服务器
Socket client = new Socket("127.0.0.1", 8888);
//获取与服务器的对象流
//输入流
ObjectInputStream ois = new ObjectInputStream(client.getInputStream());
//输出流
ObjectOutputStream oos = new ObjectOutputStream(client.getOutputStream());
//定义变量用于接收服务器输入
Object obj = null;
while ((obj = ois.readObject()) != null) {
2.这边开始接收到服务器发送的消息了,这里就 判断了下,明显消息不算Message类型,于是进入下面的语句
if (obj instanceof Message) {
Message mes = (Message)obj;
//输入
Scanner input = null;
String key = null;
switch (mes.messageStyle) {
case 0:
//输出菜单
System.out.println(mes.getMessage());
input = new Scanner(System.in);
//输入选择
System.out.println("请输入选择");
key = input.next();
//判断
switch (key) {
case "1":
//建立一个新的消息
Message returnMessage = new Message();
returnMessage.messageStyle = 1;
oos.writeObject(returnMessage);
break;
default:
break;
}
break;
case 1 :
System.out.println(mes.getMessage());
System.out.println("请输入选择:");
input = new Scanner(System.in);
break;
}
3.于是客户端就执行这一段语句了,这里的话我是把上面一个本该执行的丢在下面,为了给服务器又发个消息,接下来就算服务器接收到了,注意我最后发送的消息类型
}else {
Scanner input = new Scanner(System.in);
System.out.println("请输入选择");
String key = input.next();
if (key.equals("1")) {
Message returnMessage = new Message();
returnMessage.messageStyle = 1;
oos.writeObject(returnMessage);
}
}
}
客户端这边发送的消息:
public class Message implements Serializable{
//业务类型0表示需要查询的消息1表示查询话费2表示查询流量
public int messageStyle = 0;
//发送消息的具体内容
private String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
最后就形成了一个循环,你发我收,我收你发。