java socket 编程
来源:互联网 发布:vb中mid函数的使用方法 编辑:程序博客网 时间:2024/06/17 17:17
package com.socket;
import java.io.File;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.logging.Logger;
public class Client {
private Logger logger = Logger.getLogger(Client.class.getName());
private final static int filePath_num = 0;
private final static int host_num = 1;
private final static int port_num = 2;
public static void main(String[] args) {
Client client=new Client();
int serPort = 2012;// 默认连接端口2012;
String serIP = "127.0.0.1";// 服务器IP
try {
if (args.length < 1) {
client.logger.warning("未传值!!");
// System.err.println("未传值!!");
System.exit(0);
} else {
File file=new File(args[filePath_num]);
if(!file.exists())
{
client.logger.warning("文件不存在!!");
// System.err.println("文件不存在!!");
System.exit(0);
}
if (args.length == port_num && args[host_num].length() > 0) {
serIP = args[host_num];
}
if (args.length > port_num && args[port_num].length() > 0) {
serPort = Integer.parseInt(args[port_num]);
}
client.fileSend(args[filePath_num], serIP, serPort);
}
} catch (Exception e) {
e.printStackTrace();
// System.err.println(e.getMessage());
}
}
private void fileSend(String filePath, String serIP, int serPort) {
Socket socket = null;
OutputStream out = null;
try {
socket = new Socket(serIP,serPort);
out = socket.getOutputStream();
File fileToSend=new File(filePath);
byte[] file = new byte[256];
byte[] tfile = fileToSend.getName().getBytes();
for(int i=0;i<tfile.length;i++)
{
file[i] = tfile[i];
}
file[tfile.length] = -0;
out.write(file,0,file.length);
//大小
byte[] size = new byte[64];
byte[] tsize = (""+fileToSend.length()).getBytes();
for(int i=0;i<tsize.length;i++)
{
size[i] = tsize[i];
}
size[tsize.length] = -0;
out.write(size,0,size.length);
FileInputStream fis = null;
byte[] buf = new byte[1024*10];
fis = new FileInputStream(fileToSend);
int readsize = 0;
while((readsize = fis.read(buf, 0, buf.length))>0)
{
out.write(buf,0,readsize);
out.flush();
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
server
package com.socket;
import java.io.File;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
//服务器默认端口2012
private int serPort = 2012;
//服务器默认文件夹,用于存放接收文件
private String tempFolder = System.getProperty("user.dir")+File.separator+"ReceiveFile";
private final static int port_num=0;
private final static int tempFolder_num=1;
// //线程池
// private ExecutorService executorService;
//单个CPU线程池大小
// private final int POOL_SIZE=10;
public static void main(String[] args) {
Server server=new Server();
try {
// System.out.println("user.dir="+System.getProperty("user.dir"));
ServerSocket serverSocket = null;//设定Socket
if (args.length<1 || null==args) {
serverSocket = new ServerSocket(server.serPort);
}else {
server.serPort=server.getPort(args[port_num]);
serverSocket = new ServerSocket(server.serPort);
// Runtime的availableProcessor()方法返回当前系统的CPU数目.
// server.executorService=Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()*server.POOL_SIZE);
server.tempFolder=server.getWorkFolder(args);
}
System.out.println("Welcome to TransferServer");
System.out.println("服务器启动,监听端口" + serverSocket.getLocalPort());
System.out.println("服务器临时文件路径: "+server.tempFolder);
while (true) {
Socket socket = serverSocket.accept();
ServerThread serverThread=new ServerThread(socket,server.tempFolder);
// server.executorService.execute(serverThread);
Thread thread=new Thread(serverThread);
thread.start();
}
} catch (IOException e) {
e.printStackTrace();
System.out.println("服务器端口被占用,或其他问题.");
}
}
private int getPort(String s){
int port=serPort;
// 检测输入端口是否正确
if (s.replaceAll("//D", "")!="") {
this.serPort = Integer.parseInt(s);
}else {
System.out.println("输入的端口有错误,使用系统默认端口");
}
return port;
}
private String getWorkFolder(String[] args){
String wordFolder=this.tempFolder;
if (args[tempFolder_num].length()>0) {
wordFolder = args[tempFolder_num];
}
return wordFolder;
}
}
server线程
package com.socket;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.Socket;
public class ServerThread implements Runnable{
private Socket socket;// 实例化socket类
private String tempFolder;//文件存放路径
private java.io.InputStream in = null;//从客户端读数据的
FileOutputStream fos =null;
public ServerThread(Socket so,String tempFolder) {
this.socket = so;
this.tempFolder = tempFolder;
try {
this.in = this.socket.getInputStream();
} catch (IOException e) {
e.printStackTrace();
}
}
public void run() {
String info = "";
try
{
while(true)
{
//第一个参数为命令
long befor = System.currentTimeMillis();
// byte cmd[] = new byte[128];
int b = 0;
int ends = 0;
byte[] filename = new byte[256];
b = 0;
while(b<filename.length)
{
b += in.read(filename, b, filename.length-b);
}
ends = 0;
for(int i=0;i<filename.length;i++)
{
if(filename[i]==-0)
{
ends = i;
break;
}
}
String filenames = new String(filename,0,ends);
filenames = this.tempFolder+File.separator+System.currentTimeMillis()+filenames;
System.out.println("filenames=="+filenames);
File fileout = new File(filenames);
fos = new FileOutputStream(fileout);
byte[] filesize = new byte[64];
b = 0;
while(b<filesize.length)
{
b += in.read(filesize, b, filesize.length-b);
}
ends = 0;
for(int i=0;i<filesize.length;i++)
{
if(filesize[i]==-0)
{
ends = i;
break;
}
}
String filesizes = new String(filesize,0,ends);
System.out.println("filesize:"+filesizes);
int ta = Integer.parseInt(filesizes);
byte[] buf = new byte[1024*10];
while(true)
{
if(ta==0)
{
break;
}
int len = ta;
if(len>buf.length)
{
len = buf.length;
}
int rlen = in.read(buf, 0, len);
ta -= rlen;
if(rlen>0)
{
fos.write(buf,0,rlen);
fos.flush();
}
else
{
break;
}
}
long diff =System.currentTimeMillis() - befor;
diff /=1000;
info = "传输完成!文件已经保存到:"+filenames+",文件大小:"+filesizes+"字节,"+"共用时间:"+diff+"秒";
// int result = javax.swing.JOptionPane.showConfirmDialog(null, info, "文件传输", javax.swing.JOptionPane.YES_NO_OPTION, javax.swing.JOptionPane.INFORMATION_MESSAGE);
System.out.println(info);
fos.close();
break;
}
//socket.close();
}
catch(Exception e)
{
e.printStackTrace();
}finally{
try
{ if(fos!=null){
fos.close();
}
if(in!=null){
in.close();
}
if(socket!=null){
this.socket.close();
}
}
catch (IOException ex1)
{
}
}
}
}
其他
package com.socket;
import java.io.IOException;
import java.util.logging.ConsoleHandler;
import java.util.logging.FileHandler;
import java.util.logging.Level;
import java.util.logging.Logger;
public class UtilLog {
public static void main(String[] args) throws IOException {
Logger log = Logger.getLogger("lavasoft");
log.setLevel(Level.INFO);
Logger log1 = Logger.getLogger("lavasoft");
System.out.println(log==log1); //true
Logger log2 = Logger.getLogger("lavasoft.blog");
// log2.setLevel(Level.WARNING);
ConsoleHandler consoleHandler =new ConsoleHandler();
consoleHandler.setLevel(Level.ALL);
log.addHandler(consoleHandler);
FileHandler fileHandler = new FileHandler("C:/testlog%g.log");
fileHandler.setLevel(Level.INFO);
log.addHandler(fileHandler);
log.info("aaa");
log2.info("bbb");
log2.fine("fine");
}
}
- Java Socket编程
- Java Socket编程
- Java Socket编程(
- JAVA SOCKET编程
- Java Socket编程
- Java Socket编程
- java socket编程
- Java Socket编程
- Java Socket编程之一
- java socket编程
- Java Socket编程
- Java Socket编程
- Java Socket编程介绍
- Java Socket编程
- Java Socket编程
- java socket编程范例
- Java Socket编程
- java Socket编程基础
- 开发手机地图(有图有真相有代码)
- 软文营销的概念
- 网络整合营销之策略
- contentprovider的学习实例总结
- x64的seh
- java socket 编程
- poj 2987(最大权闭合图)最小割求解:关键是思路
- Thinking In Java中初始化和清理中的一段代码
- 为什么没有好用的Android游戏引擎?
- Android图形---OpenGL
- 2012.7.23
- Backtrack5安装ThinkPad RTL8192ce-SE无线网卡驱动,同样适用其他Linux发行版本
- Spring的IOC原理
- 磁盘配额