「java聊天文件传输」java文件流传输

博主:adminadmin 2022-12-07 08:42:06 67

本篇文章给大家谈谈java聊天文件传输,以及java文件流传输对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

我正在做一个java 聊天程序,要实现传输文件功能,求大神指导~~~最好有示例代码。。

如果是HTTP协议和FTP协议的,java版本的见代码

InputStream ios=new URL("文件bom.zip所在的WEB目录/bom.zip").openConnection().getInputStream();

BufferedOutputStream bout=new BufferedOutputStream(new FileOutputStream("c:/存放目录/bom.zip"));

byte buff[]=new byte[1024];

int count;

while((count=ios.read(buff))0){

bout.write(buff, 0, count);

}

ios.close();

bout.close();

利用Java编写一个程序利用Socket,实现网络的点对点文件传输并且能实现聊天,发个给我学习下,好吗?

这个时比较简单的。

package QQ;

import java.net.*;

import java.io.*;

import java.sql.*;

import java.util.*;

public class QQServer {

public static void main(String args[]) {

try {

HashMapString , Socket hm = new

HashMapString , Socket() ;

// 服务器到8000端口监听(1)

ServerSocket ss = new ServerSocket

(8000);

while (true) {

System.out.println("服务器正在

8000端口监听.....");

Socket s = ss.accept();

MyService t = new MyService();

t.setSocket(s) ;

t.setHashMap(hm) ;

t.start();

}

} catch (Exception e) {

e.printStackTrace();

}

}

}

class MyService extends Thread {

private Socket s ;

private HashMapString , Socket hm ;

public void setHashMap(HashMapString , Socket hm){

this.hm = hm ;

}

public void setSocket(Socket s){

this.s = s ;

}

public void run() {

try {

// 接收客户端发送来的用户名和密码(2)

InputStream is = s.getInputStream();

InputStreamReader isr = new InputStreamReader

(is);

BufferedReader br = new BufferedReader(isr);

String uandp = br.readLine();

// 拆分用户名和密码(4)

String u = "";

String p = "";

try{

u = uandp.split("%")[0];

p = uandp.split("%")[1];

}catch(Exception e){}

// 到数据库中验证(5)

Class.forName

("com.microsoft.jdbc.sqlserver.SQLServerDriver");

Connection cn = DriverManager

.getConnection(

"jdbc:microsoft:sqlserver://127.0.0.1:1433;databasename=qq2",

"sa", "123");

PreparedStatement ps = cn

.prepareStatement("select

username from username where username=? and password=?");

ps.setString(1, u);

ps.setString(2, p);

ResultSet rs = ps.executeQuery();

// 发送确认信息到客户端(7)

OutputStream os = s.getOutputStream();

OutputStreamWriter osw = new

OutputStreamWriter(os);

PrintWriter pw = new PrintWriter(osw, true);

if (rs.next()) {

pw.println("ok");

//将自己的名字发送给HashMap中的其他人

(13)

for(Socket ts : hm.values()){

OutputStream tos =

ts.getOutputStream() ;

OutputStreamWriter tosw = new

OutputStreamWriter(tos) ;

PrintWriter tpw = new

PrintWriter(tosw , true) ;

tpw.println("user%"+u) ;

}

//将其他人的名字发送给自己(13)

for(String tu : hm.keySet()){

pw.println("user%"+tu) ;

}

//将用户名和对应的Socket存入HashMap

(13)

hm.put(u, s) ;

// 接收客户端发送来的信息(11)

while (true) {

String message = br.readLine

();

if(message.equals("exit")){

for(Socket ts :

hm.values()){

OutputStream

tos = ts.getOutputStream() ;

OutputStreamWriter tosw = new OutputStreamWriter(tos) ;

PrintWriter

tpw = new PrintWriter(tosw , true) ;

tpw.println

("exit%"+u);

}

hm.remove(u);

}

String to = message.split

("%")[0];

String mess = message.split

("%")[1];

Socket ts = hm.get(to);

OutputStream tos =

ts.getOutputStream();

OutputStreamWriter tosw = new

OutputStreamWriter(tos);

PrintWriter tpw = new

PrintWriter(tosw, true);

tpw.println("mess%"+mess

+"\n");

System.out.println(message);

}

} else {

pw.println("err");

}

} catch (Exception e) {}

}

}

java 传输文件 流

最好是单独开一个端口进行文件传输,。

把文件名称、内容都读出来,约定一个格式,然后写到socket就行了。

怎么用java的socket进行文件传输?谁能给个简单的例子,包括发送端和接收端。

java中的网络信息传输方式是基于TCP协议或者UD协议P的,socket是基于TCP协议的

例子1

(1)客户端程序:

import java.io.*;

import java.net.*;

public class Client

{ public static void main(String args[])

{ String s=null;

Socket mysocket;

DataInputStream in=null;

DataOutputStream out=null;

try{

mysocket=new Socket("localhost",4331);

in=new DataInputStream(mysocket.getInputStream());

out=new DataOutputStream(mysocket.getOutputStream());

out.writeUTF("你好!");//通过 out向"线路"写入信息。

while(true)

{

s=in.readUTF();//通过使用in读取服务器放入"线路"里的信息。堵塞状态,

//除非读取到信息。

out.writeUTF(":"+Math.random());

System.out.println("客户收到:"+s);

Thread.sleep(500);

}

}

catch(IOException e)

{ System.out.println("无法连接");

}

catch(InterruptedException e){}

}

}

(2)服务器端程序:

import java.io.*;import java.net.*;

public class Server

{ public static void main(String args[])

{ ServerSocket server=null;

Socket you=null;String s=null;

DataOutputStream out=null;DataInputStream in=null;

try{ server=new ServerSocket(4331);}

catch(IOException e1){System.out.println("ERRO:"+e1);}

try{ you=server.accept();

in=new DataInputStream(you.getInputStream());

out=new DataOutputStream(you.getOutputStream());

while(true)

{

s=in.readUTF();// 通过使用in读取客户放入"线路"里的信息。堵塞状态,

//除非读取到信息。

out.writeUTF("你好:我是服务器");//通过 out向"线路"写入信息.

out.writeUTF("你说的数是:"+s);

System.out.println("服务器收到:"+s);

Thread.sleep(500);

}

}

catch(IOException e)

{ System.out.println(""+e);

}

catch(InterruptedException e){}

}

}

例子(2)

(1) 客户端

import java.net.*;import java.io.*;

import java.awt.*;import java.awt.event.*;

import java.applet.*;

public class Computer_client extends Applet implements Runnable,ActionListener

{ Button 计算;TextField 输入三边长度文本框,计算结果文本框;

Socket socket=null;

DataInputStream in=null; DataOutputStream out=null;

Thread thread;

public void init()

{ setLayout(new GridLayout(2,2));

Panel p1=new Panel(),p2=new Panel();

计算=new Button(" 计算");

输入三边长度文本框=new TextField(12);计算结果文本框=new TextField(12);

p1.add(new Label("输入三角形三边的长度,用逗号或空格分隔:"));

p1.add( 输入三边长度文本框);

p2.add(new Label("计算结果:"));p2.add(计算结果文本框);p2.add(计算);

计算.addActionListener(this);

add(p1);add(p2);

}

public void start()

{ try

{ //和小程序所驻留的服务器建立套接字连接:

socket = new Socket(this.getCodeBase().getHost(), 4331);

in =new DataInputStream(socket.getInputStream());

out = new DataOutputStream(socket.getOutputStream());

}

catch (IOException e){}

if(thread == null)

{ thread = new Thread(this);

thread.start();

}

}

public void run()

{ String s=null;

while(true)

{ try{ s=in.readUTF();//堵塞状态,除非读取到信息。

计算结果文本框.setText(s);

}

catch(IOException e)

{ 计算结果文本框.setText("与服务器已断开");

break;

}

}

}

public void actionPerformed(ActionEvent e)

{ if(e.getSource()==计算)

{ String s=输入三边长度文本框.getText();

if(s!=null)

{ try { out.writeUTF(s);

}

catch(IOException e1){}

}

}

}

}

(2) 服务器端

import java.io.*;import java.net.*;

import java.util.*;import java.sql.*;

public class Computer_server

{ public static void main(String args[])

{ ServerSocket server=null;Server_thread thread;

Socket you=null;

while(true)

{ try{ server=new ServerSocket(4331);

}

catch(IOException e1)

{ System.out.println("正在监听"); //ServerSocket对象不能重复创建。

}

try{ you=server.accept();

System.out.println("客户的地址:"+you.getInetAddress());

}

catch (IOException e)

{ System.out.println("正在等待客户");

}

if(you!=null)

{ new Server_thread(you).start(); //为每个客户启动一个专门的线程。

}

else

{ continue;

}

}

}

}

class Server_thread extends Thread

{ Socket socket;Connection Con=null;Statement Stmt=null;

DataOutputStream out=null;DataInputStream in=null;int n=0;

String s=null;

Server_thread(Socket t)

{ socket=t;

try { in=new DataInputStream(socket.getInputStream());

out=new DataOutputStream(socket.getOutputStream());

}

catch (IOException e)

{}

}

public void run()

{ while(true)

{ double a[]=new double[3] ;int i=0;

try{ s=in.readUTF();堵塞状态,除非读取到信息。

StringTokenizer fenxi=new StringTokenizer(s," ,");

while(fenxi.hasMoreTokens())

{ String temp=fenxi.nextToken();

try{ a[i]=Double.valueOf(temp).doubleValue();i++;

}

catch(NumberFormatException e)

{ out.writeUTF("请输入数字字符");

}

}

double p=(a[0]+a[1]+a[2])/2.0;

out.writeUTF(" "+Math.sqrt(p*(p-a[0])*(p-a[1])*(p-a[2])));

sleep(2);

}

catch(InterruptedException e){}

catch (IOException e)

{ System.out.println("客户离开");

break;

}

}

}

}

这些例子都是Java2实用教程上的.

关于java聊天文件传输和java文件流传输的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-12-07,除非注明,否则均为首码项目网原创文章,转载请注明出处。