码迷,mamicode.com
首页 > 其他好文 > 详细

作业2 socket通信 版本6

时间:2017-08-31 11:02:46      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:str1   util   start   stack   java.net   文件的   unknown   127.0.0.1   int   

package socket;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

// 客户端
public class Client {
boolean quit = false;//结束聊天
private String ip = "127.0.0.1";// 设置成服务器IP
private int port = 6060;// 设置服务器端口号

// 主函数
public static void main(String arg[]) throws InterruptedException {

// 1、客户端传文件或图片到服务器
// String filepath = ".\\Client\\Client.jpg";
// new Client().ClientToServer(filepath);

// 2、服务器传文件或图片到客户端
new Client().ServerToClient();

// 3、服务器和客户端互聊

new Client().ServerSocketChat();
System.out.println("断开连接,聊天已结束!");

}

// 客户端传送文件或图片给服务器
public void ClientToServer(String filePath) {

try {
Socket socket = new Socket(ip, port);// 客户端socket
// 选择进行传输的文件
File file = new File(filePath);

DataInputStream fin = new DataInputStream(new BufferedInputStream(
new FileInputStream(filePath)));
DataOutputStream fout = new DataOutputStream(
socket.getOutputStream());
// 将文件名传给服务器
fout.writeUTF(file.getName());
fout.flush();
System.out.println("传输文件大小:" + file.length() * 1.0 / 1024 + " KB");
int bufferSize = 8 * 1024;
byte[] buf = new byte[bufferSize];
while (true) {
// System.out.print(file.getName() + "文件正在从客户端传给服务器...\n");
int read = 0;
if (fin != null) {
read = fin.read(buf);
}

if (read == -1) {
break;
}
fout.write(buf, 0, read);// 把buf中的数据写入服务器
}
fout.flush();
fin.close();
// 关闭socket
socket.close();
System.out.println(file.getName() + "文件已从客户端传给服务器,保存在Server文件夹中。");
} catch (Exception e) {
e.printStackTrace();
}
}

// 从服务器端给客户端传文件
public void ServerToClient() {

try {
Socket socket = new Socket(ip, port + 1);
DataInputStream is = new DataInputStream(socket.getInputStream());
OutputStream os = socket.getOutputStream();
// 得到文件名
String filename = ".\\Client\\";
filename += is.readUTF();

System.out.println("新生成的文件路径为:" + filename);
FileOutputStream fos = new FileOutputStream(filename);
byte[] b = new byte[1024];
int length = 0;
// 从socket输入流中读取数据
while ((length = is.read(b)) != -1) {
// 把socket输入流写到文件输出流中去
fos.write(b, 0, length);
}
fos.flush();
fos.close();
is.close();
socket.close();

} catch (IOException e) {

e.printStackTrace();
}
}

// 服务器客户端互聊
public void ServerSocketChat() throws InterruptedException {
try {

Socket s = new Socket("localhost", port + 2);
System.out.println("连接成功,可以开始愉快的聊天了,若要结束聊天请按q退出!");
while (true) {

OutputStream out = s.getOutputStream();

Scanner scan = new Scanner(System.in);
String str = scan.next();

String s1 = getDate() + "\t客户端说:" + str;
System.out.println(s1);
out.write(s1.getBytes());

runner1 r = new runner1(s);// 代参构造函数构造
Thread t = new Thread(r);
t.start();
if (quit) {
// out.write("q".getBytes());
t.stop();
return;
}
if ("q".equals(str)) {
out.write("...再见!客户端已结束聊天...".getBytes());
t.sleep(1000);
t.stop();
return;// 结束聊天
}
}

} catch (IOException e) {

e.printStackTrace();
}

}

// 当前时间
public String getDate() {
// TODO Auto-generated method stub
// 获得data对象
Date nowTime = new Date();
// 创建格式化参数
String pattern = "HH:mm:ss";
// 创建SimpleDateFormat对象
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
// 定义一个变量接收时间
String timePattern = sdf.format(nowTime);
// 返回当前时间
return timePattern;
}
}

// 通过实现 Runnable 接口创建线程
class runner1 implements Runnable {
Socket s;

public runner1(Socket s) {
this.s = s;
}

public void run() {

InputStream is = null;
try {
is = s.getInputStream();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
byte buf[] = new byte[1024];
int len = 0;
while (true) {
try {
len = is.read(buf);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String str1 = new String(buf, 0, len);// 服务器端传来的文字
if ("q".equals(str1)) {
new Client().quit = true;

break;// 结束聊天
}
System.out.println(str1);

}

}

}

 

 

package socket;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

//服务器
public class Server {

int port = 6060;// 设置的端口号
boolean quit = false;

public static void main(String arg[]) throws InterruptedException {

// 1、客户端传文件或图片到服务器
// new Server().ClientToServer();

// 2、服务器传文件或图片到客户端
String filepath = ".\\Server\\server.jpg";// 服务器中所传文件的路径
new Server().ServerToClient(filepath);

// 3、服务器客户端互聊

new Server().ServerSocketChat();
System.out.println("断开连接,聊天已结束,若要结束聊天请按q退出!");

}

public void ClientToServer() {// 接受客户端上传的文件,并保存
try {
ServerSocket server = new ServerSocket(port);
System.out.println("服务器已开启");
Socket socket = server.accept();
DataInputStream is = new DataInputStream(socket.getInputStream());
OutputStream os = socket.getOutputStream();
// 得到文件名
String filename = ".\\Server\\";
filename += is.readUTF();

System.out.println("新生成的文件名为:" + filename);
FileOutputStream fos = new FileOutputStream(filename);
byte[] b = new byte[1024];
int length = 0;
while ((length = is.read(b)) != -1) {
// 把socket输入流写到文件输出流中去
fos.write(b, 0, length);
}
fos.flush();
fos.close();
is.close();
socket.close();
} catch (IOException e) {

e.printStackTrace();
}
}

// 服务器传送文件或图片给客户端
public void ServerToClient(String filePath) {
// 接受客户端的下载请求,将本地文件传输给客户端
try {
ServerSocket server = new ServerSocket(port + 1);
System.out.println("服务器已开启");
// 选择进行传输的文件
File file = new File(filePath);

Socket socket = server.accept();
System.out.println("建立socket链接");
DataInputStream fin = new DataInputStream(new BufferedInputStream(
new FileInputStream(filePath)));
DataOutputStream fout = new DataOutputStream(
socket.getOutputStream());
// 将文件名传给客户端
fout.writeUTF(file.getName());
// System.out.println(file.getName());
fout.flush();
System.out.println("传输文件大小:" + file.length() * 1.0 / 1024 + " KB");
int bufferSize = 8 * 1024;
byte[] buf = new byte[bufferSize];
while (true) {
// System.out.print(file.getName() + "文件正在从服务器传给客户端...\n");
int read = 0;
if (fin != null) {
read = fin.read(buf);
}
if (read == -1) {
break;
}
fout.write(buf, 0, read);
}
fout.flush();
fin.close();
socket.close();
System.out.println(file.getName() + "文件已从服务器传给客户端,保存在Client文件夹中。");
} catch (Exception e) {
e.printStackTrace();
}
}

// 服务器客户端互聊
public void ServerSocketChat() throws InterruptedException {
try {

ServerSocket ss = new ServerSocket(port + 2);
System.out.println("服务器已开启");
Socket s = ss.accept();

while (true) {

runner2 r = new runner2(s);// 代参构造函数构造
Thread t = new Thread(r);
t.start();

// 服务器写给客户端
OutputStream os = s.getOutputStream();

Scanner scan = new Scanner(System.in);
String str = scan.next();

String s1 = getDate() + "\t服务器说:" + str;
System.out.println(s1);
os.write(s1.getBytes());
if (quit) {
t.stop();

return;
}
if ("q".equals(str)) {
os.write(str.getBytes());
t.sleep(1000);
t.stop();
return;// 结束聊天
}

}

} catch (IOException e) {

e.printStackTrace();
}

}

// 当前时间
public String getDate() {
// TODO Auto-generated method stub
// 获得data对象
Date nowTime = new Date();
// 创建格式化参数
String pattern = "HH:mm:ss";
// 创建SimpleDateFormat对象
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
// 定义一个变量接收时间
String timePattern = sdf.format(nowTime);
// 返回当前时间
return timePattern;
}

}

// 通过实现 Runnable 接口创建线程
class runner2 implements Runnable {
Socket s;

public runner2(Socket s) {
this.s = s;
}

public void run() {
InputStream in = null;
try {
in = s.getInputStream();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
int len = 0;
byte[] buf = new byte[1024];
while (true) {
try {
len = in.read(buf);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String str1 = new String(buf, 0, len);// 服务器端传来的
if ("q".equals(str1)) {
new Server().quit = true;
break;// 结束聊天
}
System.out.println(str1);
}

}

}

 

作业2 socket通信 版本6

标签:str1   util   start   stack   java.net   文件的   unknown   127.0.0.1   int   

原文地址:http://www.cnblogs.com/tianzijiaozi/p/7456877.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!