TCP实现连接传输案例
2024-08-27 05:14:17
使用的类
ServerSocket 服务器端
构造方法:ServerSocket(端口号); 接收端使用
方法:accept(); 返回一个 Socket对象
getInetAddress();返回发送端的地址 InetAddress对象
Socket 客户端 发送端
构造方法:
Socket(IP地址,端口号);
Socket(主机名,端口号);
方法:
getPort();返回端口号
getLocalAddress();获取Socket对象绑定的本地IP地址
getInputStream();获取一个输入对象
getOutputStream();获取一个输出对象
1 服务器端创建:
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
public class TCPSERver {
public static void main(String[] args) throws IOException {
ServerSocket ss=new ServerSocket();
Socket sk=ss.accept();
InputStream is=sk.getInputStream();
File f=new File("D:\\test\\d");
//判断服务器相对的文件夹是否存在
if(!f.exists())
{
f.mkdir();
}
//文件名改为域名+毫秒值+6位随机数
String filename="zys"+System.currentTimeMillis()+new Random().nextInt();
String path=f.getAbsolutePath()+File.separator+filename+".txt";
FileOutputStream fo=new FileOutputStream(path);
byte[] b=new byte[];
int len=;
while((len=is.read(b))!=-)
{
fo.write(b,,len);
} //回复客户端
OutputStream out=sk.getOutputStream();
out.write("上传成功".getBytes());
//释放
ss.close();
fo.close(); }
}
1 创建客户端:
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Random; public class TCPSERver {
public static void main(String[] args) throws IOException {
ServerSocket ss=new ServerSocket();
Socket sk=ss.accept();
InputStream is=sk.getInputStream();
File f=new File("D:\\test\\d");
//判断服务器相对的文件夹是否存在
if(!f.exists())
{
f.mkdir();
}
//文件名改为域名+毫秒值+6位随机数
String filename="zys"+System.currentTimeMillis()+new Random().nextInt();
String path=f.getAbsolutePath()+File.separator+filename+".txt";
FileOutputStream fo=new FileOutputStream(path);
byte[] b=new byte[];
int len=;
while((len=is.read(b))!=-)
{
fo.write(b,,len);
} //回复客户端
OutputStream out=sk.getOutputStream();
out.write("上传成功".getBytes());
//释放
ss.close();
fo.close(); }
}
其他案例:
服务器使用多线程实现多人传送文件
将服务器实现代码实现Runnable接口
重写run方法,封装到run方法中 此代码中的ServerSocket ss=new ServerSocket();接收文件语句封装到实现类中
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket; public class Demo1 {
public static void main(String[] args) throws IOException {
ServerSocket ss=new ServerSocket();
//死循环一直接受客户端
while(true)
{
Socket sk=ss.accept();
MyRunnable mr=new MyRunnable(sk);
new Thread(mr).start(); } }
} import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Random; public class MyRunnable implements Runnable{
private Socket sk; public MyRunnable(Socket sk)
{
this.sk=sk;
} public void run() {
FileOutputStream fo=null;
InputStream is=null;
try{
is=sk.getInputStream();
File f=new File("D:\\test\\d");
if(!f.exists())
{
f.mkdir();
}
//文件名改为域名+毫秒值+6位随机数
String filename="zys"+System.currentTimeMillis()+new Random().nextInt();
String path=f.getAbsolutePath()+File.separator+filename+".txt";
fo=new FileOutputStream(path);
byte[] b=new byte[];
int len=;
while((len=is.read(b))!=-)
{
fo.write(b,,len);
} //回复客户端
OutputStream out=sk.getOutputStream();
out.write("上传成功".getBytes()); }catch(IOException ex){
ex.printStackTrace();
}finally{
try {
fo.close();
} catch (IOException e) { e.printStackTrace();
}
} } }
最新文章
- NYOJ 485
- 自动生成数据库字典(sql2008)
- 【转】ArcGIS 创建切片缓存方法工具总结
- git merge 合并分支
- ios自动滚动图片功能源码
- hdu 4287
- ASP.NET 实现上一篇文章 下一篇文章
- Rhythmbox中文乱码解决的方法
- Linux进程控制——exec函数族
- webpack loader加载器
- 合理使用软引用和弱引用,提升JVM内存使用性能
- 深度解读GoogleNet之Inception V1
- 集合源码分析[2]-AbstractList 源码分析
- SQL死锁操作
- python使用pip下载模块
- linux centos7 安装git
- MacOS 如何截屏
- Java中的线程状态转换和线程控制常用方法
- EntityFramework 建立一对一关系
- 软件架构设计 ADMEMS方法体系
热门文章
- 利用Mysqlbinlog恢复数据库数据
- 洛谷 2016 战略游戏(树形DP)
- C# 数据操作系列 - 0. 序言
- 你知道Spring是怎么解析配置类的吗?
- 201771030125-王英雪 实验一 软件工程准备一<;构建之法与博客首秀>;
- LeetCode--Jewels and Stones &;&; Range Sum of BST (Easy)
- matlab读取csv文件并显示
- LeetCode寻找两个有序数组的中位数
- Millar Robin模板
- 蒲公英 &#183; JELLY技术周刊 Vol.07: EcmaScript 2020 -- 所有你想要知道的都在这