‘壹’ 用java语言如何接收客户端发送的数据包
不写代码,这个要你自己完成的
JAVA提供了关于网络编程相应的API
客户端--->Socket
服务端-->ServerSocket
1.首先new出服务端对象
new ServerSocket(int port); port为指定接收的端口号
注意,你在new客户端对象的时候
new Socket(主机名,端口号) 这里的端口号要一致
2.new出服务端对象后,调用accpt()方法,接收客户端传递的数据,返回一个客户端对象, 这个客户端对象里有什么? 当然是你客户端发送的数据了
3.如何读取?
客户端的操作:
客户端写出数据至服务端 socket.getOutputStream()
客户端读取来自服务端的数据 socket.getInputStream()
服务端的操作;
利用 调用的accpet方法返回的Socket对象
ServerSocket server = new ServerSocket(8080); (假设是8080端口)
Socket socket = server.accpet();
服务端读取来自客户端的数据: socket.getInputStream();
服务端向客户端发送数据: socket.getOutputStream()
一个基本的网络通信模式就这样生成了
字节如何以网页形式显示? 全是乱码?
你客服端发送一个.mp3 能显示出来吗?
如果你想以网页显示的话,那涉及到JavaWeb编程了,servlet/jsp
QQ:170014410 可以探讨
‘贰’ java怎么自定义一个数据包并把它发送出去
客户端代码
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.net.InetSocketAddress;
import java.net.Socket;
public class Client {
public static void main(String[] args) {
int length = 0;
byte[] sendBytes = null;
Socket socket = null;
DataOutputStream dos = null;
FileInputStream fis = null;
try {
try {
socket = new Socket();
socket.connect(new InetSocketAddress("192.168.0.104", 3000),
10 * 1000);
dos = new DataOutputStream(socket.getOutputStream());
File file = new File("Moon.zip");
fis = new FileInputStream(file);
sendBytes = new byte[10240];
while ((length = fis.read(sendBytes, 0, sendBytes.length)) > 0) {
dos.write(sendBytes, 0, length);
dos.flush();
}
} finally {
if (dos != null)
dos.close();
if (fis != null)
fis.close();
if (socket != null)
socket.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
//////////////////////////////////////////////////////////
服务器代
import java.net.*;
import java.io.*;
public class Server implements Runnable {
public static void main(String[] args) {
try {
final ServerSocket server = new ServerSocket(3000);
Thread th = new Thread(new Runnable() {
public void run() {
while (true) {
try {
System.out.println("开始监听...");
Socket socket = server.accept();
System.out.println("有链接");
receiveFile(socket);
} catch (Exception e) {
}
}
}
});
th.run(); //启动线程运行
} catch (Exception e) {
e.printStackTrace();
}
}
public void run() {
}
public static void receiveFile(Socket socket) {
byte[] inputByte = null;
int length = 0;
DataInputStream dis = null;
FileOutputStream fos = null;
try {
try {
dis = new DataInputStream(socket.getInputStream());
fos = new FileOutputStream(new File("receive.MV"));
inputByte = new byte[1024];
System.out.println("开始接收数据...");
while ((length = dis.read(inputByte, 0, inputByte.length)) > 0) {
System.out.println(length);
fos.write(inputByte, 0, length);
fos.flush();
}
System.out.println("完成接收");
} finally {
if (fos != null)
fos.close();
if (dis != null)
dis.close();
if (socket != null)
socket.close();
}
} catch (Exception e) {
}
}
}
码
‘叁’ 如何使用java socket来传输自定义的数据包
以下分四点进行描述:
1,什么是Socket
网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket。Socket通常用来实现客户方和服务方的连接。Socket是TCP/IP协议的一个十分流行的编程界面,一个Socket由一个IP地址和一个端口号唯一确定。
但是,Socket所支持的协议种类也不光TCP/IP一种,因此两者之间是没有必然联系的。在Java环境下,Socket编程主要是指基于TCP/IP协议的网络编程。
2,Socket通讯的过程
Server端Listen(监听)某个端口是否有连接请求,Client端向Server 端发出Connect(连接)请求,Server端向Client端发回Accept(接受)消息。一个连接就建立起来了。Server端和Client 端都可以通过Send,Write等方法与对方通信。
对于一个功能齐全的Socket,都要包含以下基本结构,其工作过程包含以下四个基本的步骤:
(1) 创建Socket;
(2) 打开连接到Socket的输入/出流;
(3) 按照一定的协议对Socket进行读/写操作;
(4) 关闭Socket.(在实际应用中,并未使用到显示的close,虽然很多文章都推荐如此,不过在我的程序中,可能因为程序本身比较简单,要求不高,所以并未造成什么影响。)
3,创建Socket
创建Socket
java在包java.net中提供了两个类Socket和ServerSocket,分别用来表示双向连接的客户端和服务端。这是两个封装得非常好的类,使用很方便。其构造方法如下:
Socket(InetAddress address, int port);
Socket(InetAddress address, int port, boolean stream);
Socket(String host, int prot);
Socket(String host, int prot, boolean stream);
Socket(SocketImpl impl)
Socket(String host, int port, InetAddress localAddr, int localPort)
Socket(InetAddress address, int port, InetAddress localAddr, int localPort)
ServerSocket(int port);
ServerSocket(int port, int backlog);
ServerSocket(int port, int backlog, InetAddress bindAddr)
其中address、host和port分别是双向连接中另一方的IP地址、主机名和端 口号,stream指明socket是流socket还是数据报socket,localPort表示本地主机的端口号,localAddr和 bindAddr是本地机器的地址(ServerSocket的主机地址),impl是socket的父类,既可以用来创建serverSocket又可 以用来创建Socket。count则表示服务端所能支持的最大连接数。例如:学习视频网 http://www.xxspw.com
Socket client = new Socket("127.0.01.", 80);
ServerSocket server = new ServerSocket(80);
注意,在选择端口时,必须小心。每一个端口提供一种特定的服务,只有给出正确的端口,才 能获得相应的服务。0~1023的端口号为系统所保留,例如http服务的端口号为80,telnet服务的端口号为21,ftp服务的端口号为23, 所以我们在选择端口号时,最好选择一个大于1023的数以防止发生冲突。
在创建socket时如果发生错误,将产生IOException,在程序中必须对之作出处理。所以在创建Socket或ServerSocket是必须捕获或抛出例外。
4,简单的Client/Server程序
1. 客户端程序
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);
//向本机的4700端口发出客户请求
BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
//由系统标准输入设备构造BufferedReader对象
PrintWriter os=new PrintWriter(socket.getOutputStream());
//由Socket对象得到输出流,并构造PrintWriter对象
BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));
//由Socket对象得到输入流,并构造相应的BufferedReader对象
String readline;
readline=sin.readLine(); //从系统标准输入读入一字符串
while(!readline.equals("bye")){
//若从标准输入读入的字符串为 "bye"则停止循环
os.println(readline);
//将从系统标准输入读入的字符串输出到Server
os.flush();
//刷新输出流,使Server马上收到该字符串
System.out.println("Client:"+readline);
//在系统标准输出上打印读入的字符串
System.out.println("Server:"+is.readLine());
//从Server读入一字符串,并打印到标准输出上
readline=sin.readLine(); //从系统标准输入读入一字符串
} //继续循环
os.close(); //关闭Socket输出流
is.close(); //关闭Socket输入流
socket.close(); //关闭Socket
}catch(Exception e) {
System.out.println("Error"+e); //出错,则打印出错信息
}
}
}
2. 服务器端程序
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);
//创建一个ServerSocket在端口4700监听客户请求
}catch(Exception e) {
System.out.println("can not listen to:"+e);
//出错,打印出错信息
}
Socket socket=null;
try{
socket=server.accept();
//使用accept()阻塞等待客户请求,有客户
//请求到来则产生一个Socket对象,并继续执行
}catch(Exception e) {
System.out.println("Error."+e);
//出错,打印出错信息
}
String line;
BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));
//由Socket对象得到输入流,并构造相应的BufferedReader对象
PrintWriter os=newPrintWriter(socket.getOutputStream());
//由Socket对象得到输出流,并构造PrintWriter对象
BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
//由系统标准输入设备构造BufferedReader对象
System.out.println("Client:"+is.readLine());
//在标准输出上打印从客户端读入的字符串
line=sin.readLine();
//从标准输入读入一字符串
while(!line.equals("bye")){
//如果该字符串为 "bye",则停止循环
os.println(line);
//向客户端输出该字符串
os.flush();
//刷新输出流,使Client马上收到该字符串
System.out.println("Server:"+line);
//在系统标准输出上打印读入的字符串
System.out.println("Client:"+is.readLine());
//从Client读入一字符串,并打印到标准输出上
line=sin.readLine();
//从系统标准输入读入一字符串
} //继续循环
os.close(); //关闭Socket输出流
is.close(); //关闭Socket输入流
socket.close(); //关闭Socket
server.close(); //关闭ServerSocket
}catch(Exception e){
System.out.println("Error:"+e);
//出错,打印出错信息
}
}
}
‘肆’ java中如何实现从客户端发送文件到服务器端
BufferedInputStream bis = new BufferedInputStream( new FileInputStream("文件路径"));
byte[] buf = new byte[1024];
int len = 0;
BufferedOutputStream bos = new BufferedOutputStream(s.getOutputStream);
while((len = bis.read(buf))!=-1){
bos.write(buf,0,len);
bos.flush();
}
思路是这样的了。。。具体你自己写吧。
‘伍’ java中发送数据包的函数有几个啊
数据包发送有很多种,但是最底层都是inputstream 和outputstream ; 上层都是封装了这两个类,上层根据不同的应用做了不同的封装
‘陆’ 如何在Java中利用数据包求答案
尽管很多程序员不熟悉这个协议,因为对于程序来说它太难了,对于TCP来说它的使用的频率太低。但是,这个协议是非常值得我们去学习的,因为当你在没有创建TCP连接的时候,假如要在各程序之间以消息的形式改变数据,利用UDP是最适合的。当这个消息很短并且你不需要传统上的连接的时候,UDP将是最理想的协议。UDP的基本形式
UDP以数据包的形式发送和接收数据。它和TCP不同的是,它没有连接的概念,每个数据包是单独的发送,并且没有发送的担保。当几个数据包被发送到相同的位置的时候,它们可以采用不同的顺序。假如你需要发送担保和分类担保,他们就必须有程序执行UDP的最高协议,这个协议在UDP的认证包,超时和中继,顺序包等等。或者你应该考虑使用TCP来代替。和TCP一样,为了发送和接收数据包,你需要一个适当的网络插口,所以要java.net.DatagraSocket 类。和TCP不同的是,客户插口和服务器插口没有区别,那就是说,一个DatagramSocket可以在任何时候发送和接收数据。DatagramSocket虽然很方便,但是它的使用和机器的地址和端有关,这些取决于这个机器自己的构造器。这个关联决定了地址的来源和包传送的插口所在的端口,并且这个地址和插口的端口在接收数据时随时候命。假如使用的电脑有多个ip地址,你可以将插口变为一个专用地址或者是通配符地址,专用地址是指电脑上所有的IP地址。在这种情况下插口会监听所有的即将到来的数据包,但是输出的数据包地址将由分界面决定,就是有连接电脑的路由器决定。发送和接收数据
被发送或者接收数据是有java.net.DatagramPacket 类来决定的。假如你要发送数据包,你必须使用DatagramPacket包,设置你想发送包去的方位的端口和IP地址,并设置好数据的缓冲器。在返回的时候, DatagramPacket的数据缓冲器将作为一个参数通过,这个参数把握了所有接收的数据。假如这个数据的大小大于缓冲器的大小,将把多余的字节删除,DatagramPacke同样将包含发送者的地址和端口。连接远端端口
UDP的一个确定就是你必须在每个包上指定目的地的地址和端口。另外UDP插口会从任何主机上接收包,这样使你无法控制所接受的数据。但是,DatagramPacket类提供了远程主机创建连接的概念,远程主机单一化的执行决定于UDP。这个单一的特点由DatagramSocket.connect()来执行,它用来连接插口到远程主机。注重到连接通过过滤包裹发送和接收,那就是说,它并没有和远程主机建立一个真正的连接,所以,这个方法不象TCP,它自己不会发送任何数据包,也永远不会接受数据失败。
‘柒’ java 服务器怎样给客户端传输数据
java需要利用scoket实现网络通信,在通信时可以利用是从客厅、获取输入输出流达到传输数据效果
‘捌’ 紧急求助,java如何通过socket发送16进制的数据包
getOutputStream(),从连接获取输入流对象。
这个对象可以和BufferedOutputStream,OutputStreamWriter等配合使用;
建立BufferedOutputStream对象
BufferedOutputStream br=new BufferedOutputStream(socket.getOutputStream());
调用BufferedOutputStream对象的,write向流中写入数据。
‘玖’ java怎么自定义一个数据包并把它发送出去包格式如图(没有财富值, 各位大神指点一下!)
不知道你是发向哪里。
我们做Java通讯一般用socket通讯,将将对象转换成字节流,发送出去,接收端,根据约定好的协议解析数据流,把字节流转成数据。