导航:首页 > 网络安全 > 网络编程聊天室如何实现文件传输

网络编程聊天室如何实现文件传输

发布时间:2022-02-01 21:12:08

1. 用vc++6.0打造的局域网聊天室如何实现文件传输

我也想要一个,谢谢

2. 如何实现局域网点对点通信:如聊天、文件传输

额,可以参考一下Active Messenger..............

上网络搜一下吧

3. 利用Python语言,设计一个网络聊天程序,实现网络通信或者文件传输

这个是很有意思,也简单的话题 。你可以使用twisted, 或者是socket, 实现。 如果想优美些可以用stackless,也可以用greenlet。

最简单的办法是使用内置的httpserver,通过多线程socketserver,和simplehttpserver实现简单的交互。

4. 怎样用socket实现点对点的文件传输

在两台计算机传输文件之前,必需得先有一台计算机建立套接字连接并绑定一个固定得端口,并在这个端口侦听另外一台计算机的连接请求。

socket = new Socket(AddressFamily.InterNetwork,SocketType.Stream, ProtocolType.Tcp);
socket.Blocking = true ;
IPEndPoint computernode1 = new IPEndPoint(serverIpadress, 8080);
socket.Bind(computernode1);
socket.Listen(-1);

当有其他的计算机发出连接请求的时候,被请求的计算机将对每一个连接请求分配一个线程,用于处理文件传输和其他服务。

while ( true )
{
clientsock = socket.Accept();
if ( clientsock.Connected )
{
Thread tc = new Thread(new ThreadStart(listenclient));
tc.Start();
}
}

下面的代码展示了listenclient方法是如何处理另外一台计算机发送过来的请求。首先并对发送过来的请求字符串作出判断,看看是何种请求,然后决定相应的处理方法。
void listenclient()
{
Socket sock = clientsock ;
try
{
while ( sock != null )
{
byte[] recs = new byte[32767];
int rcount = sock.Receive(recs,recs.Length,0) ;
string message = System.Text.Encoding.ASCII.GetString(recs) ;
//对message作出处理,解析处请求字符和参数存储在cmdList 中
execmd=cmdList[0];
sender = null ;
sender = new Byte[32767];

string parm1 = "";
//目录列举
if ( execmd == "LISTING" )
{
ListFiles(message);
continue ;
}
//文件传输
if ( execmd == "GETOK" )
{
cmd = "BEGINSEND " + filepath + " " + filesize ;
sender = new Byte[1024];
sender = Encoding.ASCII.GetBytes(cmd);
sock.Send(sender, sender.Length , 0 );
//转到文件下载处理
DownloadingFile(sock);
continue ;
}
}
}
catch(Exception Se)
{
string s = Se.Message;
Console.WriteLine(s);
}
}

至此,基本的工作已经完成了,下面我们看看如何处理文件传输的。
while(rdby < total && nfs.CanWrite)
{
//从要传输的文件读取指定长度的数据
len =fin.Read(buffed,0,buffed.Length) ;
//将读取的数据发送到对应的计算机
nfs.Write(buffed, 0,len);
//增加已经发送的长度
rdby=rdby+len ;
}
从上面的代码可以看出是完成文件转换成FileStream 流,然后通过NetworkStream绑定对应的套节子,最后调用他的write方法发送到对应的计算机。

我们再看看接受端是如何接受传输过来的流,并且转换成文件的:

NetworkStream nfs = new NetworkStream(sock) ;
try
{
//一直循环直到指定的文件长度
while(rby < size)
{
byte[] buffer = new byte[1024] ;
//读取发送过来的文件流
int i = nfs.Read(buffer,0,buffer.Length) ;
fout.Write(buffer,0,(int)i) ;
rby=rby+i ;
}
fout.Close() ;
从上面可以看出接受与发送恰好是互为相反的过程,非常简单。

至此,单方向的文件传输就完成了,只需要在每个对等的节点上同时实现上面的发送和接受的处理代码就可以做到互相传输文件了。

5. 利用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 {
HashMap<String , Socket> hm = new

HashMap<String , 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 HashMap<String , Socket> hm ;
public void setHashMap(HashMap<String , 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) {}
}
}

6. 在java中 如何编写tcp socket聊天室并且可以文件传输

这个用几句话说不明白,Java程序设计(修订本) 297页里有源代码,不过只是聊天儿程序,没有文件传输,可以自己看着代码加文件传输功能.

7. 怎么在一个局域网聊天软件内加入文件传输功能我要详细步骤(c++)

既然你用 winsocks 实现了局域网聊天功能,那文件传输也并不难
只要你在接收文件的客户端的指定目录里创建一个文件,然后把接收到的数据段写进去,最后再校检一次看文件传输是否出错就可以了

8. Linux中网络编程怎么实现聊天和发送二进制文件

如果你想精通,那么就按照如下顺序:
1:首先看<Unix环境高级编程>,大概把Linux编程这块了解了;
2:然后看<tcp/ip 详解>这本书有点厚,慢慢看,把TCP/IP的协议都看懂,里面就用了很多Linux程序代码在讲解;
3:最后看<UNIX网络编程卷>,上面写了各种的网络编程方法等等;
如果你只是一时的学习下编程,那就看下<Unix环境高级编程>跟<UNIX网络编程卷>就好了,一般人这三本书随便翻翻看个大概就好.
作者是史蒂文森,非常厉害的大师.

9. 我想用WinSocket实现局域网内的文件传输与聊天

程序源代码

服务器程序:

Private Sub Command1_Click() --退出按钮

End

End Sub

Private Sub Command2_Click() --发送选项

Dim a As String

a = "服务器:"

Winsockserver.SendData "(" & Time & ")" & vbCrLf & textsend.Text

textget.Text = textget.Text & a & "(" & Time & ")" & vbCrLf & textsend.Text & vbCrLf --可自动换行,并有时间显示

textsend.Text = "" --发送完毕后,文本框自动清空

End Sub

Private Sub Command3_Click() --字体修改程序

CommonDialog1.Flags = cdlCFBoth Or cdlCFEffects

CommonDialog1.ShowFont

If CommonDialog1.FontName > " " Then

textget.FontName = CommonDialog1.FontName

End If

textget.FontSize = CommonDialog1.FontSize

textget.FontBold = CommonDialog1.FontBold

textget.FontItalic = CommonDialog1.FontItalic

textget.FontStrikethru = CommonDialog1.FontStrikethru

textget.FontUnderline = CommonDialog1.FontUnderline

textget.ForeColor = CommonDialog1.Color

End Sub

Private Sub Form_Load() --程序加载,文本框不可见

textsend.Visible = False

textget.Visible = False

Winsockserver.LocalPort = 1001

Winsockserver.Listen

End Sub

Private Sub Winsockserver_Close()

Winsockserver.Close

End Sub

Private Sub Winsockserver_ConnectionRequest(ByVal requestID As Long)

textsend.Visible = True --连接后,WinSock控件工作

textsend.Text = ""

textget.Visible = True

textget.Text = ""

If Winsockserver.State <> sckClosed Then Winsockserver.Close

Winsockserver.Accept requestID

End Sub

Private Sub Winsockserver_DataArrival(ByVal bytesTotal As Long)--信息接收

Dim tmpstr As String

Dim a As String

a = "客户端:"

Winsockserver.GetData tmpstr

textget.Text = textget.Text & a & tmpstr & vbCrLf

Playsound (App.Path & "\sound\security.wav")

End Sub

Public Sub Playsound(WavFile As String) --调用声音播放的文件

On Error Resume Next

Call sndPlaySound(WavFile$, SND_FLAG)

End Sub

客户端

Private Sub Command1_Click() --退出

End

End Sub

Private Sub Command2_Click() --连接,且Shape控件显示连接状态

winsockclient.Connect

Shape1.Visible = True

End Sub

Private Sub Command3_Click()

Dim aa As String

aa = "客户端:"

winsockclient.SendData "(" & Time & ")" & vbCrLf & textsend.Text

textget.Text = textget.Text & aa & "(" & Time & ")" & vbCrLf & textsend.Text & vbCrLf

textsend.Text = ""

End Sub

Private Sub Command4_Click()

CommonDialog1.Flags = cdlCFBoth Or cdlCFEffects

CommonDialog1.ShowFont

If CommonDialog1.FontName > " " Then

textget.FontName = CommonDialog1.FontName

End If

textget.FontSize = CommonDialog1.FontSize

textget.FontBold = CommonDialog1.FontBold

textget.FontItalic = CommonDialog1.FontItalic

textget.FontStrikethru = CommonDialog1.FontStrikethru

textget.FontUnderline = CommonDialog1.FontUnderline

textget.ForeColor = CommonDialog1.Color

End Sub

Private Sub Form_Load() --程序加载,文本框不可见

Text1.Text = "这里输入要连接的服务器的IP" --提示输入IP地址

textsend.Visible = False

textget.Visible = False

winsockclient.RemotePort = 1001

winsockclient.RemoteHost = ""

End Sub

Private Sub Text1_Change()

winsockclient.RemoteHost = Text1.Text

End Sub

Private Sub Winsockclient_Close()

winsockclient.Close

End Sub

Private Sub Winsockclient_Connect()

textsend.Visible = True

textsend.Text = ""

textget.Visible = True

textget.Text = ""

Command2.Visible = False

End Sub

Private Sub Winsockclient_DataArrival(ByVal bytesTotal As Long) --信息接收

Dim tmpstr As String

Dim a As String

a = "服务器:"

winsockclient.GetData tmpstr

textget.Text = textget.Text & a & tmpstr & vbCrLf

Playsound (App.Path & "\sound\security.wav")

End Sub

Public Sub Playsound(WavFile As String) --调用声音播放的文件

On Error Resume Next

Call sndPlaySound(WavFile$, SND_FLAG)

End Sub

10. socket如何实现传输各种类型的文件

传文件时,(不管什么文件)
连接-->发送文件信息(文件名,长度等)-->读数据-->发送文件数据

接受时
监听-->等待连接-->接受文件信息-->接受文件数据-->写入数据

你文件文件能传,其他文件也是一样的.可能是你的edcoding有问题吧.

阅读全文

与网络编程聊天室如何实现文件传输相关的资料

热点内容
网络红歌热歌在哪里听 浏览:482
乡镇网络安全管理制度 浏览:997
网络协议连接不成功 浏览:398
怎么有了5g信号网络经常上不去 浏览:124
为什么苹果手机切换网络会要输入密码 浏览:543
钉钉设备网络异常怎么回事 浏览:135
4兆网络下载多少千兆 浏览:180
资质异常网络监测 浏览:611
手机自己网络好打游戏很卡 浏览:51
网络测试平台有哪些 浏览:603
苹果手机有网络没有4g 浏览:135
电信卡网络哪个好 浏览:24
网络工程师考试一题多少分 浏览:505
无线网络的信号是怎么回事 浏览:301
一体机网络机顶盒怎么切换 浏览:409
网络的英语怎么写作文 浏览:234
usb共享网络和4g网卡哪个快 浏览:179
关闭网络发现会影响使用电脑吗 浏览:112
未识别网络重启路由器又恢复正常 浏览:54
网络服务组是什么意思 浏览:981

友情链接