TCP

 /* 

 *文件上传客户端,可以是一个文件,也可以是正在阅读的文本。TCP是面向连接的数据传输机制。优点,安全;缺点,效率低。
 */


package classfile;


import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
import java.util.*;
import java.text.*;


public class TCPDemo
{
public static void main(String[] args)
{
new TCPDemo();
}


//定义所有组件
private Frame frame;
private TextArea textArea;


private MenuBar menuBar;
private FileDialog fileDialog;

private Menu menuFile;
private MenuItem menuItemOpen;
private MenuItem menuItemClose;


private Menu menuNet;
private MenuItem menuItemUploadingFile;
private MenuItem menuItemUploadingText;


File file;
BufferedReader br;
PrintWriter pw;


Socket fileSocket;
ServerSocket fileServerSocket;
BufferedInputStream netInputStream;
BufferedOutputStream netOutputStream;


//创建实例即启动窗体
public TCPDemo()
{
new Thread(new Runnable(){
public void run()
{
createServerSocket();
}
}).start();


new Thread(new Runnable(){
public void run()
{
initialize();
}
}).start();
}

//初始化窗体
private void initialize()
{
frame = new Frame("我的文件上传客户端");
textArea = new TextArea();


frame.setBounds(300,100,800,500);
addFrameListener();


frame.add(textArea);


addMenuBar();


frame.setVisible(true);
}


//添加窗体监听
private void addFrameListener()
{
frame.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e)
{
//调用菜单的关闭功能。
addMenuItemCloseActionListener();
}
});
}


//添加菜单栏
private void addMenuBar()
{
menuBar = new MenuBar();
menuFile = new Menu("文件");
menuItemOpen = new MenuItem("打开");
menuItemClose = new MenuItem("退出");


//将菜单项添加到菜单条中
menuFile.add(menuItemOpen);
menuFile.add(menuItemClose);


//将菜单添加到菜单栏上
menuBar.add(menuFile);


//添加用于上传文件的菜单
menuNet = new Menu("网络功能");
menuItemUploadingFile = new MenuItem("上传文件");
menuItemUploadingText = new MenuItem("上传文本");
menuNet.add(menuItemUploadingFile);
menuNet.add(menuItemUploadingText);
menuBar.add(menuNet);


//将菜单栏添加到窗体上
frame.setMenuBar(menuBar);


//为菜单项添加活动监听
addMenuBarActionListener();
}


//添加菜单项的活动监听
private void addMenuBarActionListener()
{
menuItemOpen.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e)
{
addMenuItemOpenActionListener();
}
});


menuItemClose.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e)
{
addMenuItemCloseActionListener();
}
});


menuItemUploadingFile.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e)
{
addMenuItemUploadingFileActionListener();
}
});


menuItemUploadingText.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e)
{
addMenuItemUploadingTextActionListener();
}
});
}


//打开文本功能模块
private void addMenuItemOpenActionListener()
{
if(fileDialog==null)
{
fileDialog = new FileDialog(frame,"打开",FileDialog.LOAD);
fileDialog.setBounds(400,150,500,300);
fileDialog.setVisible(true);


String fileDirectory = fileDialog.getDirectory();
String fileName = fileDialog.getFile();


if(fileName==null || fileDirectory==null)
return;


file = new File(fileDirectory,fileName);
}
else
{
fileDialog.setVisible(true);


String fileDirectory = fileDialog.getDirectory();
String fileName = fileDialog.getFile();


if(fileName==null || fileDirectory==null)
return;


file = new File(fileDirectory,fileName);
}


textArea.setText("");


try
{
br = new BufferedReader(new FileReader(file));


char[] charArray = new char[1024*1024];
int length = 0;


while ((length = br.read(charArray))!=-1)
{
textArea.append(String.valueOf(charArray,0,length));
}
}
catch (Exception ex)
{
ex.printStackTrace();
}
finally
{
if(br!=null)
try
{
br.close();
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
}


//关闭功能模块
private void addMenuItemCloseActionListener()
{
System.exit(0);
}

//上传文件功能模块
public void addMenuItemUploadingFileActionListener()
{
if(fileDialog==null)
{
fileDialog = new FileDialog(frame,"打开",FileDialog.LOAD);
fileDialog.setBounds(400,150,500,300);
fileDialog.setVisible(true);


String fileDirectory = fileDialog.getDirectory();
String fileName = fileDialog.getFile();


if(fileName==null || fileDirectory==null)
return;


file = new File(fileDirectory,fileName);
}
else
{
fileDialog.setVisible(true);


String fileDirectory = fileDialog.getDirectory();
String fileName = fileDialog.getFile();


if(fileName==null || fileDirectory==null)
return;


file = new File(fileDirectory,fileName);
}

try
{
fileSocket = new Socket("127.0.0.1",17000);

netInputStream = new BufferedInputStream(new FileInputStream(file));
netOutputStream = new BufferedOutputStream(fileSocket.getOutputStream());
BufferedInputStream bis = new BufferedInputStream(fileSocket.getInputStream());
byte[] buf = new byte[1024*1024];
int length = 0;

netOutputStream.write("file".getBytes());
netOutputStream.flush();
bis.read(buf);

netOutputStream.write(file.getName().getBytes());
netOutputStream.flush();
bis.read(buf);

while((length=netInputStream.read(buf,0,buf.length))!=-1)
{
netOutputStream.write(buf,0,length);
netOutputStream.flush();
}
fileSocket.shutdownOutput();
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
if(netInputStream!=null)
try
{
netInputStream.close();
}
catch (Exception e)
{
e.printStackTrace();
}
if(fileSocket!=null)
try
{
fileSocket.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}


//上传文本功能模块
public void addMenuItemUploadingTextActionListener()
{
String fileText = textArea.getText();

try
{
fileSocket = new Socket("127.0.0.1",17000);
netOutputStream = new BufferedOutputStream(fileSocket.getOutputStream());

netOutputStream.write("text".getBytes());
netOutputStream.flush();
new BufferedInputStream(fileSocket.getInputStream()).read(new byte[1024]);

netOutputStream.write(fileText.getBytes());
netOutputStream.flush();

}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
if(fileSocket!=null)
try
{
fileSocket.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}


//文件服务器模块
private void createServerSocket()
{
Socket socket = null;
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
int count = 1;
try
{
fileServerSocket = new ServerSocket(17000);
}
catch (Exception e)
{
e.printStackTrace();
}

while(true)
{
try
{
socket = fileServerSocket.accept();
bis = new BufferedInputStream(socket.getInputStream());
bos = new BufferedOutputStream(socket.getOutputStream());

byte[] buf = new byte[1024*1024];
int length = bis.read(buf);

String flag = new String(buf,0,length);
bos.write("OK".getBytes());
bos.flush();

if("file".equals(flag))
{
length = bis.read(buf,0,buf.length);
bos.write("OK".getBytes());
bos.flush();


String fileName = new String(buf,0,length);
String[] fileNameArray = fileName.split("\\.");
bos = new BufferedOutputStream(new FileOutputStream("SecondaryFile\\"+
fileNameArray[0]+"_"+
new SimpleDateFormat("yy年MM月dd日hh时mm分ss秒").format(new Date())+
"."+fileNameArray[1]));


while((length=bis.read(buf,0,buf.length))!=-1)
{
bos.write(buf,0,length);
bos.flush();
}
}


if("text".equals(flag))
{
bos = new BufferedOutputStream(
new FileOutputStream("SecondaryFile\\UploadingFile_"+(count++)+".txt"));

while((length=bis.read(buf,0,buf.length))!=-1)
{
bos.write(buf,0,length);
bos.flush();
}
}
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
if(bos!=null)
try
{
bos.close();
}
catch (Exception e)
{
e.printStackTrace();
}
if(socket!=null)
try
{
socket.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值