1樓:匿名使用者
......直接讀成二進位制流,在接收端或者說伺服器端接收到二進位制流後 以同樣的型別進行轉換就好
看下這個方法.將陣列型別讀取為二進位制流
private byte serializeonlinelist()
iformatter format = new binaryformatter();
memorystream stream = new memorystream();
format.serialize(stream, onlinelist);
byte ret = stream.toarray();
stream.close();
return ret;
}而這是接收端的行為
byte onlinebuff = new byte[_maxpacket];
int bytecnt = _nws.read(onlinebuff, 0, onlinebuff.length);
iformatter format = new binaryformatter();
memorystream stream = new memorystream();
stream.write(onlinebuff, 0, bytecnt);
stream.position = 0;
stringcollection onlinelist = (stringcollection)format.deserialize(stream);
其它型別都可以這樣進行轉換.stringcollection只是一個型別,你可以利用任何型別進行同樣的操作 ...至於怎麼傳送資料這個不用我說了吧.
networkstream 本身有write和read方法貌似
1.簡單伺服器端
//using system.data;
//using system.net.sockets;
//using system.net;
//using system.threading;
int port=%%2;
private thread ththreadread;
private tcplistener tcplisten;
private bool blistener=true;
private socket stread;
void listen()
}catch(security.securityexception)
}ththreadread=new thread(new threadstart(listen));
ththreadread.start();
2.簡單客戶端
//using system.data;
//using system.net.sockets;
//using system.net;
int port=%%1;
private tcpclient tcpc;
private socket stsend;
private bool tcpconnect=false;
trycatch(exception)
int ilength=%%3.length;
byte bysend=new byte[ilength];
bysend=system.text.encoding.default.gebytes(%%3);
int retval=stsend.send(bysend);
}protected override void dispose(bool disposing)
if(disposing && component!=null)
}base.dispose(disposing);
}3.獲得本機ip
//using system.net;
ipaddress addresslist = dns.gethostbyname(dns.gethostname()).addresslist;
string s=null;
for (int i = 0; i < addresslist.length; i++)
%%1=s;
2樓:日拱一卒行則將至
//測試url程式 客戶端和伺服器端在後面public class testurl
}客戶端程式
public class clientdemobrsocket.close();
pw.close();
br.close();
socket.close();}}
服務端程式
public class serverdemobrin.close();
in.close();
pw.close();
server.close();
socket.close();}}
3樓:**天道
tcpclient clientsocket = null;
networkstream ns = null;
streamreader sr = null;
streamwriter sw = null;
bool connected = false;
private void connecttoserver(object myobject)
}else
}catch }}
private void receivechat()}catch}
4樓:
建議參照http協議自己設定頭資訊,不然不可能未卜先知的得到整個流中資料的長度
關於c#,100分+相送。c#中socket程式設計中,怎麼獲取接受到得資料長度
5樓:匿名使用者
這個.一般都是建立一個緩衝區
byte buffer = new byte[1024];
然後通過read迴圈去填充緩衝區的.直到read到buffer中的為null了..
最後你可以通過總的接受到的資料得到長度.不要妄想在接收完之前能得到資料長度.不現實的.
6樓:編號
伺服器端向客戶端傳送檔案之前,可以先向客戶端傳送一個資料大小的值。否則只能累計分包值得到檔案資料最終長度
receive方法中的幾個過載都是什麼啊
------------------------------------
完全可以自己看msdn
socket.receive (byte) 從繫結的 socket 套接字接收資料,將資料存入接收緩衝區。
由 .net compact framework 支援。
socket.receive (泛型 ilist) 從繫結的 socket 接收資料,將資料存入接收緩衝區列表中。
socket.receive (byte, socketflags) 使用指定的 socketflags,從繫結的 socket 接收資料,將資料存入接收緩衝區。
由 .net compact framework 支援。
socket.receive (泛型 ilist, socketflags) 使用指定的 socketflags,從繫結的 socket 接收資料,將資料存入接收緩衝區列表中。
socket.receive (byte, int32, socketflags) 使用指定的 socketflags,從繫結的 socket 接收指定位元組數的資料,並將資料存入接收緩衝區。
由 .net compact framework 支援。
socket.receive (泛型 ilist, socketflags, socketerror) 使用指定的 socketflags,從繫結的 socket 接收資料,將資料存入接收緩衝區列表中。
socket.receive (byte, int32, int32, socketflags) 使用指定的 socketflags,從繫結的 socket 接收指定的位元組數,存入接收緩衝區的指定偏移量位置。
由 .net compact framework 支援。
socket.receive (byte, int32, int32, socketflags, socketerror) 使用指定的 socketflags,從繫結的 socket 接收資料,將資料存入接收緩衝區。
7樓:強女幹未遂被日
函式原型:
public int receive (byte[ ] buffer, int size, socket flagssocketflags)
引數:buffer 表示接收到的資料的儲存位置;size表示要接收資料的大小;socketflagst提供socket訊息的常數值,具有允許按位組合其成員值的屬性。返回值為傳送到socket的位元組數。
c# socket 如何完全傳送/接收資料
8樓:大野瘦子
傳送:private void button2_click(object sender, eventargs e)
catch}}
接收:system.timers.timer atimer = new system.timers.timer();
byte res = new byte[1024];
private void form1_load(object sender, eventargs e)
void timermange()
private void socket_rev(object sender, eventargs e)}
9樓:匿名使用者
比如b1:1-100是一個「資料包」,b2:0是一個「資料包」,每次傳送以「資料包」為單位傳送,「資料包」中包含「開始」和「結束」的標記,那麼 傳送端 b1,b2的執行可以想象成 資料包b1:
b1開始+1~100+b1結束,資料包b2:b2開始+0+b2結束,接受端 接受到資料包b1的"b1開始"標記時,建立b1執行緒,b1執行緒接受到1~10時,接受端 接受到資料包b2的"b2開始"標記,建立b2執行緒,b2執行緒接受0,b2執行緒接受"b2結束"標記,釋放b2執行緒,同時b1執行緒接受到11~100和"b1結束"標記釋放b1執行緒。
文字描述的不是很給力,**例子看看,希望能讓你明白。
10樓:匿名使用者
存在情況:
1、 接收端迴圈沒寫好
2、沒有讀完網路流(快取可以設大些,或判斷是否讀到完所有的位元組)建議要一次發完所有資料 可以先將100個數字拼接成字串,然後傳送一次 。字串頭可加入[length=***]其中***是實際傳送的字串長度(注意不是位元組陣列buffer的長度),那麼對於上面的請求,則我們傳送的資料為:「[length=9]1,2,23,54」。
而服務端接收字串之後,首先讀取這個「後設資料」的內容,然後再根據「後設資料」內容來讀取實際的資料。取得內空後就可以拆分成數字
C怎麼寫才能實時獲取時間,C 怎麼獲取系統時間並讓他隨時更新,就是能看見時間一秒一秒的往前走
datatime.now.tostring yyyy年m月d日hh mm 然後做個定時器,間隔時間1秒,定時執行這個語句, 在窗體上 timer控制元件,設定屬性enable ture 設定interval 1000.單位是毫秒。雙擊timer控制元件,在裡面寫label1.text datetim...
c怎麼實現獲取實時星期,c 怎樣獲取系統星期幾?
血祭狂刀 datetime now datetime.now int n int now.dayofweek string weekdays messagebox.show weekdays n 波帥168668 同學,你那裡應該用switch的. 大圈科技學霸推薦 這個沒辦法 獲取出來的就是英文 ...
C語言程式設計,c語言的程式設計
給十分寫那麼多。給你說第一個吧。輸入十個數,用一個for語句就好了。int a 10 for int i 0 i 10 i 最大數。int max a 0 int m for int j 0 j 10 j a i a 9 a 9 max 小數的變下符號就是了。c語言程式設計 摘要。親親具體什麼問題呀...