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

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

发布时间: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有问题吧.

阅读全文

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

热点内容
网络行业需要哪些人才 浏览:66
广东达内网络营销 浏览:826
无线网络设备线索 浏览:891
switch连了wifi连不上网络 浏览:766
在没有网络的地方怎么上网 浏览:824
苹果更新必须要接入无线网络 浏览:371
品茗网络计划中怎么断开逻辑关系 浏览:388
房间没有网络可以用无线网卡吗 浏览:12
青浦区去哪里戒除网络依赖 浏览:598
网络硬盘映射每次都需要输入密码 浏览:788
手机怎么连上教室的多媒体网络 浏览:248
手机有信号上不了网络是什么问题 浏览:15
苹果笔记本重装完wifi没网络 浏览:422
网络接口显示1234哪个网络好 浏览:859
网络配线架多少钱一台 浏览:486
小度可以分享手机网络吗 浏览:33
网络电话怎么申请 浏览:511
有网络但是wifi搜不到 浏览:240
苹果手机转账提示网络出现问题 浏览:504
白色强人哪个网络平台播出 浏览:47

友情链接