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有問題吧.