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,随便在消息处理打个断点。
不明白这有什么困难