导航:首页 > 编程大全 > 网络通信开发

网络通信开发

发布时间:2024-04-18 06:37:14

『壹』 做网络通信 java开发的,主要要学习说明内容

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(); //消息发送完毕,关闭对象
}
}
}

阅读全文

与网络通信开发相关的资料

热点内容
win10默认头像下载 浏览:216
dnf2017代码大全 浏览:219
编程项目经理证书怎么考 浏览:570
律师咨询什么app 浏览:863
ps导入ai什么格式文件 浏览:255
手机升级系统的利弊 浏览:411
如何判断两列是否相同的数据 浏览:25
安卓系统微信文件夹 浏览:19
xp打开word找不到文件 浏览:488
文件名占容量 浏览:882
环型槽如何编程 浏览:290
excel怎么分列每一列的第二行数据 浏览:240
美味餐厅13安卓版完整 浏览:708
请先卸载本地app什么意思 浏览:639
广东有什么土建材料网站 浏览:613
安卓手机究竟应该给app什么权限 浏览:137
怎样给特定文件夹加密码 浏览:168
win10卡在85 浏览:421
excel文件怎么无法打开 浏览:970
java文件路径截取 浏览:271

友情链接