导航:首页 > 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服务器端相关的知识