socket 作业第五版

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 ServerScoket {
// 服务器端
int port = 6060;// 设置的端口号
boolean quit=false;
static int i;//分支
public static void main(String arg[]) throws InterruptedException {

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

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

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

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

}

public void ClientToServer() {// 接受客户端上传的文件,并保存
try {
ServerSocket server = new ServerSocket(port);
System.out.println("服务器已开启");
//while (true) {
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("服务器已开启");
//while (true) {

// 选择进行传输的文件
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)
{

return;
}
if ("q".equals(str)) {
os.write(str.getBytes());
t.sleep(1000);

return;// 结束聊天
}

}

// s.close();
// System.out.println("断开连接,聊天已结束!");

} 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() {
// String ip = s.getInetAddress().getHostAddress();
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 ServerScoket().quit=true;
break;// 结束聊天
}
System.out.println(str1);

}

}

}

2、

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 ClientScoket {
boolean quit=false;
private String ip = "127.0.0.1";// 设置成服务器IP
private int port = 6060;// 设置服务器端口号
static int i;
// 主函数
public static void main(String arg[]) throws InterruptedException {

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

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

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

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

}

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

try {
Socket socket = new Socket(ip, port);// 客户端socket
//while (true) {
// 选择进行传输的文件
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);
//while (true) {
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("连接成功,可以开始愉快的聊天了!");
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());
return;
}
if ("q".equals(str)) {
out.write(str.getBytes());
t.sleep(1000);

return;// 结束聊天
}
}

//System.out.println("断开连接,聊天已结束!");
} 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 ClientScoket().quit=true;
break;// 结束聊天
}
System.out.println(str1);

}

}

}

时间: 2024-10-13 01:00:16

socket 作业第五版的相关文章

马哥linux作业第五周'

1.显示当前系统上root.fedora或user1用户的默认shell: egrep "^(root|fedora|user1)\>" /etc/passwd |cut -d: -f1,7 root|fedora|user1表示三者符合其一的选择条件 ()使其归组 ^表示以后面归组的条件开头 \>表示以空字符截断此前的条件字符,即后跟其它字符的单词将不匹配 2.找出/etc/rc.d/init.d/functions文件中某单词后面跟一组小括号的行,形如:hello():

C primer plus 第五版十二章习题

看完C prime plus(第五版)第十二章,随带完成了后面的习题. 1.不使用全局变量,重写程序清单12.4的程序. 先贴出12.4的程序,方便对照: 1 /* global.c --- 使用外部变量 */ 2 #include <stdio.h> 3 int units = 0; //一个外部变量 4 void critic(void); 5 int main(void) 6 { 7 extern int units; 8 9 printf ("How many pounds

图解TCP/IP第五版 -- 目录

很多年前买过<TCP/IP详解>3卷,当时可能根本没看,也可能是看了又忘了,没有留下什么印象,当时的书也当做废品卖了. 卖书时的感觉貌似是,买了太多的书,基本都没看,搬家搬来搬去的麻烦,不如从网上看些资料来的直接,三箱子书都卖了,有很多书都是当年颇有名的,书的范围也很广. 单说语言层面,其实当时没有理解语言的精髓,甚至把开发工具的熟练使用当做学会语言,现在还记得的,买过的有各种<开发人员指南>:Delphi.C++Builder.VB.ASP.JBuilder.C#:现在想来也是不

图解TCP/IP第五版 -- 文件夹

非常多年前买过<TCP/IP具体解释>3卷,当时可能根本没看,也可能是看了又忘了,没有留下什么印象,当时的书也当做废品卖了. 卖书时的感觉貌似是.买了太多的书,基本都没看,搬家搬来搬去的麻烦,不如从网上看些资料来的直接.三箱子书都卖了.有非常多书都是当年颇有名的,书的范围也非常广. 单说语言层面,事实上当时没有理解语言的精髓,甚至把开发工具的熟练使用当做学会语言.如今还记得的,买过的有各种<开发者指南>:Delphi.C++Builder.VB.ASP.JBuilder.C#:如今

MD5 Message Digest Algorithm MD5(中文名为消息摘要算法第五版)

MD5 编辑 Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护.该算法的文件号为RFC 1321(R.Rivest,MIT Laboratory for Computer Science and RSA Data Security Inc. April 1992). MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致.是计算机广泛使用的杂凑

C++ Primer 第五版:第1 章

*****C++ Primer 第五版第1章学习笔记***** *****实验代码在Red Hat 6.6或VS 2013中调试***** *****文章内容依据当前知识撰写,存在认识的局限性***** 1.1 编写一个简单的C++程序 函数:依据我个人理解,C/C++的函数是一个能够完成一个功能的模块. 完整函数的组成: ①返回类型:不一定有返回值,故不一定有返回类型 ②函数名:根据名字标识完成特定功能的模块,必须存在 ③形参列表:可能没有参数传入,不一定存在 ④函数体:一个完整的函数应该是有

C++ Primer【第五版】习题参考答案——第六章(函数)

本系列文章会不断更新,但是时间不能保证.另外基本上都是自己做的答案,仅供参考,如果有疑问欢迎交流. #include <iostream> #include <initializer_list> using namespace std; int test_Ex_6_27(std::initializer_list<int> li); int main() { cout << test_Ex_6_27({23,78,89,76,90}) << en

c++ primer(第五版)学习笔记及习题答案代码版(第十四章)重载运算与类型转换

笔记较为零散,都是自己不熟悉的知识点. 习题答案至于一个.h 和.cc 中,需要演示某一题直接修改 #define NUM****, 如运行14.30题为#define NUM1430: Alice Emma has long flowing red hair. Her Daddy says when the wind blows through her hair, it looks almost alive, like a fiery bird in flight. A beautiful f

【阅读笔记】计算机网络 第五版 阅读笔记(持续更新)

计算机网络 第五版阅读笔记 第一章 概述 1.因特网的组成 边缘部分:由所有连接在因特网上的主机组成 核心部分:由大量网络和连接这些网络的路由器组成 2.计算机之间的通信方式 客户服务器端方式(C/S模式):客户端是服务请求方,服务器端是服务提供方 对等方式(P2P模式):平等,对等连接通信,每一个主机既是客户又是服务器. 3.电路交换,分组交换和报文交换 3.1 电路交换:建立连接(占用通信资源)->通话(一直占用)->释放连接(释放通信资源). 优点:在通话的全部时间内,通话的两个用户始终