javasocketudp編程
Ⅰ 用SOCKET,UDP編程時,要發送的數據放在數組裡面進行發送即數組長度可變,請問如何設置接收端數組長度
最好的socket編程方式是在頭部前4個位元組放整個數據長度,再4個位元組消息類型,4個位元組列號,==再內容。即是消息頭部長度固定,內容部分可變。如果每次發送數據大小超過單次發送量,數據會被分包發送。在接收端還要做組包處理。組包也是根據數據長度去組包。這些是2年電信大數據開發得出的實際經驗。
Ⅱ 用java.net進行UDP編程伺服器端和客戶端的流程是怎樣的
伺服器端:
import java.io.*;
import java.net.*;
import java.applet.Applet;
public class TalkServer{
public static void main(String args[]) {
try{
ServerSocket server=null;
try{
server=new ServerSocket(4700);
}catch(Exception e) {
System.out.println("can not listen to:"+e);
}
Socket socket=null;
try{
socket=server.accept();
}catch(Exception e) {
System.out.println("Error."+e);
}
String line;
BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter os=new PrintWriter(socket.getOutputStream());
BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
System.out.println("Client:"+is.readLine());
line=sin.readLine();
while(!line.equals("bye")){
os.println(line);
os.flush();
System.out.println("Server:"+line);
System.out.println("Client:"+is.readLine());
line=sin.readLine();
}
os.close();
is.close();
socket.close();
server.close();
}catch(Exception e){
System.out.println("Error:"+e);
}
}
}
客戶端:
import java.io.*;
import java.net.*;
public class TalkClient {
public static void main(String args[]) {
try{
Socket socket=new Socket("127.0.0.1",4700);
BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
PrintWriter os=new PrintWriter(socket.getOutputStream());
BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));
String readline;
readline=sin.readLine(); //從系統標准輸入讀入一字元串
while(!readline.equals("bye")){
os.println(readline);
os.flush();
System.out.println("Client:"+readline);
System.out.println("Server:"+is.readLine());
readline=sin.readLine(); //從系統標准輸入讀入一字元串
}
os.close(); //關閉Socket輸出流
is.close(); //關閉Socket輸入流
socket.close(); //關閉Socket
}catch(Exception e) {
System.out.println("Error"+e); //出錯,則列印出錯信息
}
}
}
Ⅲ Java socket UDP 編程 為什麼一台電腦間可以通信,client,server,router在不同電腦上不好使。router只是
首先確定鏈接IP和埠的正確性
然後確定server router再監聽對應的UDP埠,還有確保兩台機器之間的防火牆沒有屏蔽對應UDP埠,這樣的話應該可以能夠使client鏈接到server或者router的
Ⅳ java 編程 網路游戲 socket
UDP只是Socket的一種協議,兩者都可以用到,但是ServerSocket是必須用到的,對你的作業,如果只是兩人對戰,必然一人是ServerSocket(主服務),另外一個是Socket(客戶端);如果多人的話,還需要建立單獨的伺服器,多個客戶端之間不直接通信,通過伺服器來通信。
Ⅳ 基於udp 的socket通信用什麼語言編程
貌似java,c都可以,好像提供socketAPI的編程語言,它實現的socket都支持TCP和UDP的
起碼java,c是兩個都支持的,你可以搜以下java socket或者 c socket
Ⅵ 求java寫的多線程socket埠監聽伺服器端程序,要代界面的.
業務需要這么復雜嗎???如果你要實現伺服器和客戶端都可以向對方發送消息,而不等待對方應答,只需要把InputStream和OutputStream分別放在兩個不同線程里就行了,即是說把接收流與發送流分別用一個線程監聽處理。如果要實現不分客戶端伺服器的話,用UDP通信即可
補充回答:如果不涉及到MIME,只是收發簡單文本郵件。就會比較簡單。因為就像你說的,smtp和pop3協議就是文本格式的。你用Socket建立連接後,就像讀文件一樣,一行一行的讀數據,然後按照協議分析數據格式。例如如果開始時USER那麼後面可能跟的就是用戶等。
就是一個字元串解析和匹配的過程。網上好像有這類代碼,自己找一個學習一下。我以前用C在68k上作過,不是很難。不過代碼已經沒有了。
你的是郵件客戶端,功能類似於outlook,foxmail等,如果你能上網,就不需要郵件伺服器,直接用自己的郵件賬號來測試,例如如果你有一個sina的郵件賬戶,就可以從sina伺服器收發郵件。
不過為了測試方便,還是上網去收一個郵件伺服器把。例如foxmail server等。網上有教程,可以配置好的。
對於編程,既然要求用socket編寫,那麼就要熟悉java的socket編程,這部分倒是很簡單。可能還需要看看多線程部分。
另外,你需要學習一下, smtp和pop3這兩個網路協議的內容,因為你需要解析這兩個協議。如果需要收發代附件的,還需要看mime的內容,不過估計不需要。
其實java有自己的類庫javamail,可以實現手法郵件,功能很強大。不過既然要求必須用socket,那就不能這個了。
說的太羅嗦了。總結一下:
1)配置郵件伺服器,搭建測試環境
2)熟悉java的socket編程、 Swing編程(編寫界面)、多線程(選用)
3)熟悉smtp和pop3的內容(內容很多,了解基本的就可以)
網上應該有類似代碼,可以用來參考。
Ⅶ java Socket通信原理
具體如下:
首先socket 通信是基於TCP/IP 網路層上的一種傳送方式,我們通常把TCP和UDP稱為傳輸層。其中UDP是一種面向無連接的傳輸層協議。UDP不關心對端是否真正收到了傳送過去的數據。
如果需要檢查對端是否收到分組數據包,或者對端是否連接到網路,則需要在應用程序中實現。UDP常用在分組數據較少或多播、廣播通信以及視頻通信等多媒體領域。
在這里我們不進行詳細討論,這里主要講解的是基於TCP/IP協議下的socket通信。
socket是基於應用服務與TCP/IP通信之間的一個抽象,他將TCP/IP協議裡面復雜的通信邏輯進行分裝。
服務端初始化ServerSocket,然後對指定的埠進行綁定,接著對埠及進行監聽,通過調用accept方法阻塞。
此時,如果客戶端有一個socket連接到服務端,那麼服務端通過監聽和accept方法可以與客戶端進行連接。
Java是一門面向對象編程語言,不僅吸收了C++語言的各種優點,還摒棄了C++里難以理解的多繼承、指針等概念,因此Java語言具有功能強大和簡單易用兩個特徵。
Java語言作為靜態面向對象編程語言的代表,極好地實現了面向對象理論,允許程序員以優雅的思維方式進行復雜的編程。
Java具有簡單性、面向對象、分布式、健壯性、安全性、平台獨立與可移植性、多線程、動態性等特點。Java可以編寫桌面應用程序、Web應用程序、分布式系統和嵌入式系統應用程序等。
Ⅷ java網路編程:程序問題,接收不到數據
這是java網路編程里的UDPServer和UDPClient之間簡單通信程序啊,等等我看看你的程序再說
你想要的是不是這種效果?
import java.net.*;
class UdpSend{
public static void main(String[] args)throws Exception{
//1.創建udp服務,通過DatagramSocket對象
DatagramSocket ds = new DatagramSocket(8888);//---這兒的埠號不要和UdpRece的一樣
//2.確定數據,並封裝成數據包。
//DatagramPacket(byte[] buf, int length, InetAddress address,
int port)
//構造數據報包,用來將長度為 length 的包發送到指定主機上的
指定埠號。
byte[] buf = "udp shu ju lai le".getBytes();
DatagramPacket dp =
new DatagramPacket(buf,buf.length,InetAddress.getByName
("169.254.200.14"),10000);//----這兒的埠號保持與UdpRece一樣
//3.通過Socket服務,將已有的數據包發送出去。通過send方法。
ds.send(dp);
//4.關閉資源
ds.close();
}
}
最後想說,先運行UdpRece 再運行UdpSend,反過來UdpSend要運行2遍
Ⅸ 怎麼調試java socket編程
如果是tcp/ip,在accept或者send裡面打斷點,如果是udp,隨便在消息處理打個斷點。
不明白這有什麼困難