導航:首頁 > IDC知識 > javaudp伺服器端

javaudp伺服器端

發布時間:2020-11-01 20:47:14

1、用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); //出錯,則列印出錯信息
}
}
}

2、JAVA socket基於TCP/IP協議編程,是這樣寫的JAVA代碼,伺服器端:I/O流和server

http://www.cnblogs.com/linzheng/archive/2011/01/23/1942328.html 對照的來例子 親手源寫一個 好好閱讀文檔 很容易就學會了

3、客戶端使用UDP協議不停的向伺服器發送數據,Java這邊需要存儲這些數據並進行處理,如何監控這個數據?

2個方法,設復置2個變數分制別記載當前處理的queue下標A,(假設你的queue是結構體數組長度200),還有個表量記載還沒有操作的總數B。
1.保證每個數據都接收。即時沒有處理完也接收,循環加,從0-199再循環,另一個線程處理,從當前標記A開始往下處理,沒處理完一個A+1 B-1,接收線程沒接收一個B+1,B一直循環,QUEUE[B]接收數據,一定要注意,這2個變數和你的數組要加鎖,防止2個線程同時被修改
2.保證處理,如果沒處理完就不接收,加到B到上限就停止,但數據也是循環的存儲,其他方法和上面一樣,就是要注意加鎖
以上說的方法是數據先進先出,如果想做先進後出的話,就每次處理當前A的數據,然後向前回溯就可以了

4、java代碼TCP/IP網路通信伺服器客戶端,實現雙方信息交互。

package com.weixin.test;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;

import org.junit.Test;

public class ScoketTest {

@Test
public void client() throws Exception{

InetAddress i=InetAddress.getByName("127.0.0.1");


Socket s=new Socket(i, 9000);

OutputStream outputStream = s.getOutputStream();

outputStream.write("服務端你好,我是客戶端哦!".getBytes());

s.shutdownOutput();
InputStream inputStream=s.getInputStream();

int length=0;

byte[] bytes=new byte[1024];

while ((length=inputStream.read(bytes))!=-1) {
System.err.println(new String(bytes,0,length));
}

inputStream.close();
outputStream.close();
s.close();
}


@Test
public void server() throws Exception{

ServerSocket serverSocket=new ServerSocket(9000);

Socket socket = serverSocket.accept();

InputStream inputStream = socket.getInputStream();

OutputStream outputStream = socket.getOutputStream();

int length=0;

byte[] bytes=new byte[1024];

while ((length=inputStream.read(bytes))!=-1) {
System.err.println(new String(bytes, 0,length));
}

outputStream.write("客戶端你好,本王已收到!".getBytes());

outputStream.close();
inputStream.close();
socket.close();
serverSocket.close();




}

}

5、一個簡單java實現udp通信

UDP也可以和TCP那樣遍歷list然後發送啊
客戶端向外面開一個UDP埠接受數據報
然後伺服器這內邊要是有消息要發送容就直接發送數據報包就可以了嘛
UDP都不用保持著連接的,比TCP還簡單些

另外也可以用組播來實現,搜索下java UDP 組播,你能找到不少實例性的代碼,也有聊天室的代碼

6、客戶端使用UDP協議不停的向伺服器發送數據,Java這邊需要存儲這些數據並進行處理,如何監控這個數據?

搜一下:客戶端使用UDP協議不停的向伺服器發送數據,Java這邊需要存儲這些數據並進行處理,如何監控這個數據?

7、java的UDP通信中,怎麼從伺服器端獲取文本文件內容並顯示在組件上

1:客戶端程序
[java] view plain copy
package com.pb.udp;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.net.DatagramSocket;

/**
* 使用Sender類來代表客戶端程序,
* @author ccna_zhang
*
*/
public class Sender {

public static void main(String[] args) {
String msg = "Hello, World";
byte[] buf = msg.getBytes();
try {
InetAddress address = InetAddress.getByName("192.168.1.80"); //伺服器地址
int port = 8080; //伺服器的埠號
//創建發送方的數據報信息
DatagramPacket dataGramPacket = new DatagramPacket(buf, buf.length, address, port);

DatagramSocket socket = new DatagramSocket(); //創建套接字
socket.send(dataGramPacket); //通過套接字發送數據

//接收伺服器反饋數據
byte[] backbuf = new byte[1024];
DatagramPacket backPacket = new DatagramPacket(backbuf, backbuf.length);
socket.receive(backPacket); //接收返回數據
String backMsg = new String(backbuf, 0, backPacket.getLength());
System.out.println("伺服器返回的數據為:" + backMsg);

socket.close();

} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}

2:伺服器端程序
[java] view plain copy
package com.pb.udp;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketAddress;
import java.net.UnknownHostException;

/**
* 伺服器端程序
* @author ccna_zhang
*
*/
public class Receiver {

public static void main(String[] args) {

try {
InetAddress address = InetAddress.getLocalHost();
int port = 8080;

//創建DatagramSocket對象
DatagramSocket socket = new DatagramSocket(port, address);

byte[] buf = new byte[1024]; //定義byte數組
DatagramPacket packet = new DatagramPacket(buf, buf.length); //創建DatagramPacket對象

socket.receive(packet); //通過套接字接收數據

String getMsg = new String(buf, 0, packet.getLength());
System.out.println("客戶端發送的數據為:" + getMsg);

//從伺服器返回給客戶端數據
InetAddress clientAddress = packet.getAddress(); //獲得客戶端的IP地址
int clientPort = packet.getPort(); //獲得客戶端的埠號
SocketAddress sendAddress = packet.getSocketAddress();
String feedback = "Received";
byte[] backbuf = feedback.getBytes();
DatagramPacket sendPacket = new DatagramPacket(backbuf, backbuf.length, sendAddress); //封裝返回給客戶端的數據
socket.send(sendPacket); //通過套接字反饋伺服器數據

socket.close(); //關閉套接字

} catch (UnknownHostException e) {
e.printStackTrace();
} catch(IOException e) {
e.printStackTrace();
}
}
}

3:程序運行結果
伺服器端:
客戶端發送的數據為:Hello, World
客戶端:
伺服器返回的數據為:Received

8、為什麼JAVA中的UDP協議的伺服器端和客戶端運行出來時間後面有框框?

下回來最好把圖片拍清楚點,根本自看不清你的代碼。輸出的信息後面有亂碼,一般都是有無效數據導致的,猜測是你開的buffer太大了,udp消息沒有填滿它,你也沒有判斷receive的數據長度就把整個buffer全輸出了,所以後面會有一塊無效數據形成亂碼。

9、JAVA用udp從本地網路穿透到公網之後,從其他網路作為客戶端發送udp包到伺服器正常接收。

你說的還不清楚。baiduJava網路編程使用Socket,同為一個網路下的主機時是肯定沒問題的,不版論同一局域權網或廣域網。如果內網跨越網關,我沒做過試驗,按我的理解,內網主機做客戶端,獨立主機做伺服器應該可行,反之不行。

10、各位大蝦,急需java的基於udp的即時通訊實例;需要客戶端和伺服器端;不要資料庫的;

給你解釋一下過程來:
基於自TCP / IP模式:
伺服器,打開監聽線程(也可以留言??,讓系統管理線程)收到的每個請求創建一個套接字每一個插座和一個根據客戶端的連接請求,客戶端選擇合適的客戶端套接字綁定,剛剛接到一個客戶的信息直接轉發到另一個客戶端

每個客戶端初始化後,立即播出時間已建立UDP模式:在收到客戶端的鏈表保存這個客戶給自己的客戶。需要自定義消息,包括自己的ID和接收器ID。其他類似TCP模式。

與javaudp伺服器端相關的知識