问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

做网络通信 JAVA开发的,主要要学习说明内容?

发布网友 发布时间:2022-04-30 01:42

我来回答

1个回答

热心网友 时间:2022-06-28 07:12

1.IP地址与端口号
网络中的计算机若需要实现相互通信,必须为每台计算机指定标识号,通过标识号来指定接收数据和识别发送数据的计算机。TCP/IP协议中的“标识”即为IP地址。
一台计算机可同时运行多个网络程序,使用IP地址能够将数据发送到计算机,却不能保证将数据提交至哪个网络程序。因此每个被发送的网络数据包的头部都设有“端口”部分,该部分为整数,用于表示将数据帧交给哪个应用程序进行处理。同时还必须为网络程序指定端口号,使不同的应用程序接收不同端口上的数据。
同一台计算机不能存在多个使用同一端口的程序。端口数的范围在0-65535之间,其中在0-1023之间的端口号用于知名的网络服务和应用,1024以上的端口号用于普通应用程序,这样做可以避免端口号代表的网络程序串用。

2.TCP与UDP
TCP为传输控制协议,UDP为用户数据报协议。TCP是面向连接的通信协议,它提供两台计算机之间可靠无差错的数据传输。应用程序使用TCP进行通信时,数据源与目标之间将建立虚拟的连接,连接一旦建立,两台计算机之间就可以将数据作为双向字节流进行交换。
UDP是无连接的通信协议,它不保证可靠数据的传输,但能够实现向若干个目标发送数据的功能。

3.Socket简介
Socket(套接字)是网络驱动层为应用程序提供的接口和机制,其作用可以看作是为应用程序创建的港口码头。

4.TCP网络编程概述
TCP协议具体操作步骤如下:
(1)服务器程序创建ServerSocket对象,调用accept()方法等待客户端连接。
(2)客户端程序创建Socket对象与客户端建立专线连接。
(3)服务器接收客户的连接请求,并创建新的Socket对象与客户端建立专线连接。
(4)实现(2)、(3)步骤中建立连接的两个Socket在同一线程上对话。
(5)服务器重新等待新的连接请求。

5.ServerSocket类
TCP网络服务器程序的编写,需要使用ServerSocket类创建服务器。
ServerSocket类的主要方法如下:
方法 类型 描述
public ServerSocket(int port) 构造方法 创建ServerSocket实例
public Socket accept() 方法 等待客户端连接
public InetAddress getInetAddress() 方法 返回服务器的IP地址
public boolean isClosed() 方法 返回ServerSocket的关闭状态
public void close() 方法 关闭ServerSocket
服务器端每次运行时均需调用accept()方法等待客户端连接,该方法执行后服务端将进入阻塞状态,直到客户端再次连接。accept()方法的返回类型为Socket。

6.Socket类
客户端必须创建Socket对象来建立与服务器的连接,每个Socket对象代表一个客户端。
Socket类的常用方法如下:
方法 类型 描述
public Socket(String host,int port) 构造方法 创建Socket对象,同时指定要连接服务器的主机名和商品号
public InputStream getInputStream() 方法 返回套接字的输入流
public OutputStream getOutputStream() 方法 返回套接字的输出流
public boolean isClosed() 方法 返回套接字的关闭状态
public void close() 方法 关闭此Socket

注意:TCP网络编程中的信息使用输入输出流的形式传递。

7.TCP服务器程序
编写TCP服务器程序,代码如下:
package com;
import java.net.*;
import java.io.*;
public class TcpServer{
public static void main(String []a){
ServerSocket server=null;
Socket socket=null;
BufferedReader in=null;
PrintWriter out=null;
try{
//服务器在9000端口上监听
server=new ServerSocket(9000);
//接收客户端连接
socket=server.accept();
//得到客户端输入信息
in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
//向客户端输出信息,true是自动刷新缓冲区
out=new PrintWriter(socket.getOutputStream(),true);
out.println("已建立与服务器的连接");
String info=in.readLine();
System.out.println("客户端的输入是:"+info);
}catch(Exception e){
e.printStackTrace();
}
finally{
try{
in.close();
out.close();
socket.close();
server.close();

}catch(Exception e){
e.printStackTrace();
}
}
}
}

为验证服务器端程序能否正常工作,程序还需提供客户端程序与服务器进行通信。Windows系统中的telnet程序是一个系统自带的TCP客户端,可以使用telnet来进行与服务器端的通信测试。运行telnet时指定连接服务器的IP地址和端口号,连接一旦建立,telnet程序窗口就可以将输入内容发送至服务器,同时,可以显示从服务器接收到的数据。测试步骤如下:
(1) 运行服务器端程序
(2) 在DOS窗口中运行telnet 127.0.0.1 9000,由于服务器端程序和客户端程序在同一台机器上,所以可以使用127.0.0.1代表本机。

注:调用一次accept()方法只能接受一个连接,接受多个连接需要将该方法放在循环语句中,同时每个连接的数据的数据输入输出也应放在一个循环语句中,才能实现服务器端与客户端的持续交换。
class Service implements Runnable{
Socket socket=null;
BufferedReader in=null;
PrintWriter out=null;
public Service(Socket socket){
this.socket=socket;
}

public void run(){
//得到客户端输入信息
in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
//向客户端输出信息,true是自动刷新缓冲区
out=new PrintWriter(socket.getOutputStream(),true);
//循环读取客户端数据并向客户端写入数据
while(true){
out.println("已建立与服务器的连接");
System.out.println("客户端说:"+in.readLine());
}
}
catch(Exception e){
e.printStackTrace();
}
finally{
try{
in.close();
out.close();
socket.close();
server.close();

}catch(Exception e){
e.printStackTrace();
}
}
}
}

public class TcpServer{
ServerSocket server=null;
Socket socket=null;
try{
//服务器在9000端口上监听
server=new ServerSocket(9000);
//接收多个客户端连接
while(true){
socket=server.accept();
new Thread(new Service(socket)).start();
}catch(Exception e){
e.printStackTrace();

}
}
}

8.TCP客户端程序
package com;
import java.net.*;
import java.io.*;
public class TcpClient{
public static void main(String []a){
ServerSocket server=null;
Socket socket=null;
BufferedReader in=null;
BufferedReader input=null;
PrintWriter out=null;
try{
socket=new Socket("127.0.0.1",9000);
while(true){
input=new BufferedReader(new InputStreamReader(System.in);
in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
}

//向服务器端输出信息,true是自动刷新缓冲区
out=new PrintWriter(socket.getOutputStream(),true);
out.println("客户端说:"+input.readLine);
String info=in.readLine();
System.out.println("服务器说:"+info);
}catch(Exception e){
e.printStackTrace();
}
}
}

9.UDP网络编程
(1)DatagramSocket类主要用于实现信息的发送和接收。
DatagramSocket类的主要方法:
方法 类型 描述
public DatagramSocket() 构造方法 构造DatagramSocket对象不指定监听端口
public DatagramSocket(int port) 构造方法 构造DatagramSocket对象指定监听端口
public void send(DatagramPacket p) 方法 发送数据报
public void receive(DatagramPacket p) 方法 接收数据报

(2)DatagramPacket类
DatagramPacket类用于包装一条要发送或接收的信息,发送数据和接收数据都需要构建DatagramPacket对象。
DatagramPacket类的主要方法:
方法 类型 描述
public DatagramPacket(byte[] buf,in length) 构造方法 构造DatagramPacket对象时指定内存空间和大小
public DatagramPacket(byte[] buf,in length,InetAddress address,int port) 同上
public byte[] getData() 方法 返回接收数据
public int getLength() 方法 返回发送或接收数据的长度
public InetAddress getAddress() 方法 返回机器的地址

(3)InetAddress类
InetAddress类用于表示计算机地址,主要方法如下:
方法 类型 描述
public static InetAddress getByName(String host) 方法 通过主机名或IP地址获得一个InetAddress对象
public String getHostName() 方法 获得IP地址对应的主机名
public String getHostAddress() 方法 返回IP地址字符串

10. UDP程序设计
编写UDP网络程序需要分别编写发送程序和接收程序
(1)发送程序
package com;
import java.net.*;
public class UdpSend{
public static void main(String [] a){
DatagramSocket ds=null;
DatagramPacket dp=null;
byte[] buf=new byte[1024];
try{
//DatagramSocket类用于完成消息的发送
ds=new DatagramSocket();
String info="hello world";
dp=new DatagramPacket(info.getBytes(),info.length,InetAddress.getByName("localhost"),3000);
//发送数据包
ds.send(dp);
}catch(Exception e){
e.printStackTrace();
}
finally
{
ds.close(); //消息发送完毕,关闭对象
}
}
}

(2)接收程序
package com;
import java.net.*;
public class UdpRecv{
public static void main(String [] a){
DatagramSocket ds=null;
DatagramPacket dp=null;
byte[] buf=new byte[1024];
try{
//DatagramSocket类用于完成消息的发送
ds=new DatagramSocket();
dp=new DatagramPacket(buf,1024);
//接收发送方发送的数据
ds.receive(dp);
String str=new String(dp.getData(),0,dp.getLength());
str=str+" from "+dp.getAddress.getHostAddress();
System.out.println(str);
}catch(Exception e){
e.printStackTrace();
}
finally
{
ds.close(); //消息发送完毕,关闭对象
}
}
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...换手机号显示你以设置拒收微信登陆.换绑.注册短信怎么解决? 伊拉克战争是哪些国家发动的?请快回答,我有急用! 二零零三年三月谁发动了对伊拉克的战争 西门子、美的、容声三个门的冰箱那个牌子又省电又实用? 海尔冰箱BCD-206 SCFM 放3档工作多长时间 ,停多长时间正常 海尔BCD-206SCFM基本参数 6年级上册数学练习册百分数50到53页答案 小学数学六年级(上):帮你学数学口算练习册2008年印刷版信息 小学数学六年级(上):帮你学数学口算练习册2010年印刷版信息 小学六年级数学上册百分数练习册《课堂作业本》答案64面第2题 无颜之月OVA,泪求 请问下面这个网址里的人物是哪部动漫的啊?? 求无颜之月OVA下载 求无颜之月ova 1-5集谁有啊。。。谢谢。。。 求无颜之月ova1-5 邮想:188815554 求无颜の月ova动漫,5集都要啊,谢谢 请发我邮箱 linbeaijj@126.com_百 ... 无颜之月第一集剧情 无颜之月ova 求无颜之月ova全集 无颜之月ova全集 陈存款入银行2500元,1年后扣陈20万的利息税之后得到的利息和为2600元,问银行这种存款的年利率是多少 作文600字初中通用 合肥国耀花半里归哪个派出所 国耀花半里交通方便吗?应该怎么过去? 国耀花半里周边环境怎么样?生活便利吗? 合肥大学城国耀花半里怎么坐车 今天国耀花半里为什么停电 【国耀花半里】内燃气是什么情况?收费标准之类的 168学区房卖多少合适? 【国耀花半里】这个小区的房子适合出租吗? 2016cp2158是魅族什么型号? 开发一个网络通信协议具体需要做哪些工作? 网络通信方面什么编程语言最好 如何更改kindle的字体 深圳市广深通网络通信科技开发有限公司怎么样? 魅族16x手机此应用未经过魅族应用商店安全检测可能存在安全风险是怎么回事_百度问一问 网络通讯行业的研发是不是相比其他软件研发的难? 应该怎么样学习网络通信编程? 京市股票是什么意思 计算机网络开发都学什么 Kindle可以改变字体吗?比如那种可爱的字体 iOS版 Kindle为什么不能换字体? 用visual studio2013怎么进行网络通讯的开发,用什么控件进行? 嵌入式 网络通信 软件开发 选择问题 new kindle能更换字体吗 四川干锅菜花的做法 想学习一下网络协议开发,请问有什么好建议么 kindle2怎样调整字体大小 干锅菜花怎么做,正宗的干锅菜花做法学习 家里有wifi为什么看今日头条极速版看不了电视上不能播放视频但是能刷新...