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有问题吧.