JAVA TCP-UDP常用构造函数

来源:互联网 发布:车间布局仿真软件 编辑:程序博客网 时间:2024/06/07 12:40

UDP:
DatagramSocket
public DatagramSocket() throws SocketException
public DatagramSocket(int port) throws SocketException
public DatagramSocket(int port,InetAddress laddr) throws SocketException

port:为socket绑定端口,不指定,系统会自动分配未被占用的端口
laddr:为socket绑定IP地址,适用于计算机有多块网卡和多个IP的情况,我们可以明确规定我们的数据通过哪块网卡向外发送和接收哪块网卡收到的数据。(遇到的双网卡问题,应用红色部分的函数构造UDP,即可解决问题,

例:DatagramSocket udpSocket = newDatagramSocket(2425,InetAddress.getByName("192.168.1.2")) ; )

发送一般用第一种构造方法(不用指定端口),接收一般用第二种构造方法(要指定端口)

如果我们的程序不再使用某个Socket,我们应该调用DatagramSocket.close()方法

发送数据时,用Datagram.send()方法
public void send(DatagramPacket p) throws IOException

接收数据时,用Datagram.receive()方法
public void recevie(DatagramPacket p) throws IOException


DatagramPacket
public DatagramPacket(byte [] buf,int length)
public DatagramPacket(byte [] buf,int length,InetAddress,int port)
发送用第二种,接收用第一种

InetAddress
在发送数据时,DatagramPacket构造方法需要传递一个InetAddress的实例对象,InetAddress是用于表示计算机地址的一个类,我们习惯上表示计算机地址是用字符串格式(192.168.0.1),根据字符串地址格式来创建一个InetAddress类的实例对象 用InetAddress.getByName()这个静态方法能够根据我们的条件返回一个InetAddress类的实例对象。
数据接收到DatagramPacket对象中后,通过DatagramPacket.getInetAddress()返回InetAddress类型的对象,转换成用点隔开的字符串型的IP地址用InetAddress.getHostAddress()方法。

byte [] buf=new byte[1024];
buf[]={1,2,33,5,4}
new String(buf,0,buf.length);
buf.toString();
注意最后两行的不同。


TCP
ServerSocket
public ServerSocket() throws IOException
public ServerSocket(int port) throws IOException
public ServerSocket(int port,int backlog) throws IOException
public ServerSocket(int port,int backlog,InetAddress bindAddr) throws IOException
一般用第二种

Socket
public Socket()
public Socket(String host,int port) throws UnknownHostExcetion,IOException
public Socket(InetAddress Address,int port) throws IOException
public Socket(String host,int port,InetAddress localAddr,int localPort()) throws IOException
public Socket(InetAddress address,int port,InetAddress localAddr,int localPort) throws IOException
一般用第二种指定服务器地址和和端口

当客户端和服务器端的两个建立了专线连接后,连接的一端能向另一端连续写入字节,也能从另一端连续读入自己,也就是建立了专线连接的两个Socket是IO流的方式进行数据交换的。Socket.getInputStream方法链接的两个Socket是以IO流的方式进行数据交换的。
Socket.getInputStream返回Socket输入流对象,Socket.geOutputStream返回Socket的输出流对象。


弱点:IO输入输出,数据类型转换

0 0