tcp编程
2012-03-19 18:43 党飞 阅读(341) 评论(0) 收藏 举报---------------------- android培训、java培训、期待与您交流! ----------------------
上节实现了udp的传输,现在看看tcp的网络编程是怎么实现的。
tcp有客户端和服务器端之分,对应的有两个类Socket和ServerSocket.
那么我们首先需要建立客户端和服务器端,连接建立后,通过Socket中的IO流就行数据传输,最后关闭Socket。
下面看一个例子:
下面这个例子实现从客户端传输一个文件到服务器端。
先建立一个服务器端:
public static void main(String[] args) {
// TODO Auto-generated method stub
ExecutorService eService = Executors.newCachedThreadPool();
eService.execute(new Runnable() {
@Override
public void run() {
new Server("f:\\tt").start(); //初始化上传文件存储位置
}
});
}
public Server(String root){
this.root=root;
}
private Socket socket;
private String root; //上传文件根路径
private String fileName;
void start(){
System.out.println("服务器已启动。");
try {
ServerSocket serverSocket = new ServerSocket(8899);
socket = serverSocket.accept();
InputStream inStream=socket.getInputStream();
byte[] bufIn=new byte[1024];
int num =inStream.read(bufIn);
String server=new String(bufIn,0,num);
if(server.startsWith("||"))
fileName=server.substring(2);
InputStream inputStream=socket.getInputStream();
FileOutputStream foStream = new FileOutputStream(root+"\\"+fileName);
byte[] buf=new byte[1024];
int len=0;
while((len=inputStream.read(buf))!=-1)
{
foStream.write(buf, 0, len);
}
foStream.close();
serverSocket.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
上面这段代码实现对本机8899端口的监听,并实现把接收到的数据存入本地磁盘。
建立客户端:
public static void main(String[] args) {
// TODO Auto-generated method stub
new Client().transFile("d:\\shaoVir.exe"); //指定要上传文件所在位置
}
private Socket socket;
void transFile(String path){
try {
socket = new Socket(InetAddress.getLocalHost().getHostAddress(),8899);
OutputStream outputStream = socket.getOutputStream();
File file =new File(path);
outputStream.write(("||"+file.getName()).getBytes());
outputStream.flush();
System.out.println("传输文件:"+file.getName());
FileInputStream fiStream=new FileInputStream(path);
byte[] buf=new byte[1024];
int len=0;
while((len=fiStream.read(buf))!=-1)
{
outputStream.write(buf, 0, len);
}
outputStream.flush();
outputStream.close();
//socket.shutdownOutput();
System.out.println("传输完成");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
客户端建立tcp连接,并负责把指定文件上传到服务器端。
---------------------- android培训、java培训、期待与您交流! ----------------------
浙公网安备 33010602011771号