您的位置:首页 > 理论基础 > 计算机网络

Java利用TCP协议发送文件(一)--服务器端

2014-05-07 15:04 411 查看
      最近要写一个使用TCP进行文件传输的软件,考虑客户端是使用手机的,因此,准备采用Java作为开发语言,自己本身对于Java本不熟,还好,有个热心的网友已经将TA的代码公开了,有了这个基本原型,就可以进行进一步开发了。

    服务器端采用的是TCP server socket监听端口,如果有客户端连接到服务器,就创建一个新的线程进行处理,在这个线程中,只接受客户端发送过来的数据,并保存发送过来的数据到指定文件中。
    代码如下:

设置TCP Server Socket监听端口的类:
/**
*
*/
package com.sheng.Server;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

/**
* @author sheng
*
*/
public class Server {

/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException
{
// TODO Auto-generated method stub

// TCP 服务器监听6666端口
ServerSocket socket = new ServerSocket(6666);
Socket client = null;

while (true)
{
// 接收客户端连接
client = socket.accept();
System.out.println("Accept clinte.");

// 处理客户端的连接
new Thread(new RecivingDataThread(client)).start();
}

}

}


    

   处理客户端请求的线程类:
/**
*
*/
package com.sheng.Server;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import java.net.Socket;

/**
* @author sheng
*
*/
public class RecivingDataThread implements Runnable
{
private Socket Client = null;
public static int NumberOfThreads = 0;

public RecivingDataThread(Socket Client)
{
this.Client = Client;
NumberOfThreads++;
}

public void run()
{

BufferedInputStream SocketInput = null;

// TODO Auto-generated method stub
try
{
SocketInput = new BufferedInputStream(Client.getInputStream());
}
catch (IOException e2)
{
// TODO Auto-generated catch block
e2.printStackTrace();
}

// 接收文件的名字
FileNamePackage Name = new FileNamePackage(true);
if (Name.Receive(SocketInput) != -1) {
System.out.println("The name is " + Name.GetFileName());
}
else {
System.out.println("Cannot read the data.");
}

String ReceiveName = Name.GetFileName();

// 打开要写入的文件
FileOutputStream fos = null;
try {
fos = new FileOutputStream("D:/" + ReceiveName);
}
catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
BufferedOutputStream bos = new BufferedOutputStream(fos);

System.out.println("Reading data.");

// 接收文件数据
FileDataPackage Data = new FileDataPackage(true);
while (Data.Receive(SocketInput) != -1) {
Data.Write(bos);
}

// 关闭输出的文件和Socket
try
{
bos.close();
fos.close();
SocketInput.close();
Client.close();
}
catch (IOException e)
{
e.printStackTrace();
}

System.out.println("client socket is end.");

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息