一、套接字 socket
网络驱动程序提供给应用程序编程的接口和一种机制,可以比喻成一个港口码头 应用程序只要把货放在这,就算完成了货物的运送。它在应用程序中创建,通过一种绑定机制与驱动程序建立关系,告诉自已对应的ip 和 port。
socket是 java 中网络编程的类 , 位于java.net包中。
---- datagramsocket //用于udp通迅
---- serversocket //用于tcp通讯,用于服务端
---- socket //用于tcp通讯的服务端和客户端
二、udp 网络程序
inetaddress 类 表示互联协议(ip)地址
//static inetaddress getlocalhost() throws unknownhostexception 返回本地主机
//static inetaddress getbyname(string host) 在给定主机名的情况下确定主机的 ip 地址。 主机名可以是机器名
//(如 java.sun.com),也可以是其 ip 地址的文本表示形式
//static inetaddress[] getallbyname(string host) 根据主机名返回其 ip 地址所组成的数组。
static void ipdemo() throws unknownhostexception{
inetaddress netaddr=inetaddress.getlocalhost(); //取得本地电脑的一些信息system.out.println(netaddr.tostring());
system.out.println(netaddr.gethostaddress());
system.out.println(netaddr.gethostname()); //取得其他电脑的信息inetaddress netaddr2=inetaddress.getbyname(dell-pc); //这里也可以传ip地址system.out.println(netaddr2.gethostaddress()); //169.254.170.71system.out.println(netaddr2.gethostname()); //dell-pc //取得百度的地址inetaddress [] iplist=inetaddress.getallbyname(www.baidu.com);for(inetaddress addr:iplist){
system.out.println(addr.tostring());
}
}
三、udp发送和接收 datagramsocket , datagrampacket
//例一 最简的发送和接收
发送端==要导java.net包
通过udp的方式把数据发出去:
1) 建立udpsocket服务
2) 提供数据,将数据封装到数据包中 datagrampacket (byte[] buf, int length, inetaddress address, int port) //构造函数有多个
3) 通过socket服务,发送数据
4) 关闭资源
import java.net.*;class sender4{//datagrampacket (byte[] buf, int length, inetaddress address, int port) public static void main(string [] args) throws exception
{ byte [] buff=hello cat.getbytes();
datagramsocket socket=new datagramsocket();
datagrampacket packet=new datagrampacket(buff,buff.length,inetaddress.getbyname(192.168.0.103),8888);
socket.send(packet);
socket.close();
system.out.println(ok);
}
}
--接收端
1) 创建socket服务,指定在某个端口上监听
2) 创建一个用于接收数据的 datagrampacket
3) 从包中取出数据
4) 关闭资源
import java.net.*;class receive4
{public static void main(string [] args) throws exception
{
datagramsocket socket=new datagramsocket(8888); //别忘了端口号byte[] buff=new byte[1024] ;
datagrampacket packet=new datagrampacket(buff,buff.length);
socket.receive(packet);
string senderip=packet.getaddress().gethostaddress();
string senderdata=new string(packet.getdata(),0,packet.getlength());int senderport=packet.getport();
system.out.println(senderip+---+senderdata+---+senderport);
socket.close();
}
}
//例二,循环的发送和接收
import java.net.*;import java.io.*;class newsender{public static void main(string [] args) throws exception
{
system.out.println(发送端启动了);
datagramsocket socket=new datagramsocket();
bufferedreader br=new bufferedreader(new inputstreamreader(system.in)); //包装键盘输入流string str=null;while((str=br.readline())!=null){byte [] buff=str.getbytes();
datagrampacket packet=new datagrampacket(buff,buff.length,inetaddress.getbyname(127.0.0.1),9000);
socket.send(packet);
}
br.close();
socket.close();
}
}
import java.net.*;class newreceiver{public static void main(string [] args) throws exception
{
datagramsocket socket=new datagramsocket(9000);
system.out.println(接收端启动了); while(true){
byte [] buff=new byte[1024] ;
datagrampacket packet=new datagrampacket(buff,buff.length);
socket.receive(packet);
string senderip=packet.getaddress().gethostaddress(); int sendport=packet.getport();
string msg= new string(packet.getdata(),0,packet.getlength());
system.out.println(senderip+:+sendport+:+msg);
}
}
}
例三:多线程聊天室程序
class chat
{public static void main(string [] args)
{new thread(new sendthread()).start(); new thread(new receivethread()).start();
}
}
//发送端import java.io.*;import java.net.*;class sendthread implements runnable
{ private datagramsocket socket;public void run()
{try{
socket=new datagramsocket();
bufferedreader br=new bufferedreader(new inputstreamreader(system.in));
string msg=null;while((msg=br.readline())!=null){byte[] buff=msg.getbytes();
datagrampacket packet=new datagrampacket(buff,buff.length,inetaddress.getbyname(127.0.0.1),10000);
socket.send(packet);
}
socket.close();
br.close();
}catch(exception ex){
ex.printstacktrace();
}
}
}
//接收端import java.net.*;class receivethread implements runnable{ private datagramsocket socket; public void run(){try{
socket=new datagramsocket(10000);while(true){byte [] buff=new byte[1024];
datagrampacket packet=new datagrampacket(buff,buff.length);
socket.receive(packet);
string senderip=packet.getaddress().gethostaddress();int senderport=packet.getport();
string msg=new string(packet.getdata(),0,packet.getlength());
system.out.println(senderip+:+senderport+:+msg);
}
}catch(exception ex)
{
system.out.println(ex.getmessage());
}
}
}
以上就是java之网络编程实例详解的详细内容。