-----------------------android培训、java培训、java学习型技术博客、期待与您交流!----------------------
Java中的网络编程更加简洁,他提供了各种Socket类程序员只需要了解这些类的构造和相关方法,即可轻松编写网络程序,正式因为这样Java才紧紧抓住Web的大潮,从而推动网络的大发展。而无论任何网络程序都是运行在一定的协议体系中的,所以了解这些网络协议,对我们理解各种Socket类,进而编写网络程序起到事半功倍的效果。
网络遵循两种协议,1,TCP/IP协议,该协议是网络的核心协议,其中TCP协议运行在客户端,他的任务是在网络上的两个机器之间实现端到端,可靠的数据传输功能,IP运行在网络的核心设备路由器上,负责将数据分组从源端发送到目的端,该协议的特点是:面向连接,可靠,传输速度较慢;2,UDP是面向无连接的,数据以封装为报文的方式发送,字节开销小,且不需要建立链接,吞吐量主要受应用软件,传输宽带及主机性能的影响,传输速度快,但不太安全,容易造成数据丢失;两种协议都处在传输层。
网络编程实际上就是Socket编程,Socket套接字在客户,服务器通信魔心中扮演十分重要的角色,它如同无武器与客户端之间的代理,完成双方应用程序发送和接受数据的任务,客户建立和服务器的链接创建一个Socket,服务器一旦接受客户的链接请求也返回一个Socket,之后这两个Socket就可以互相收发数据了;
以下是向服务端发送一个小文件的示例TCP/IP程序;
class TextClient{
public static void main(String[] args)throws Exception {
Socket s=newSocket("192.168.1.155",13000);//创建Socket对象,指定接受方IP地址及端口号;
BufferedReader bfr=newBufferedReader(
new FileReader("IPDemo.java"));
PrintWriter out=newPrintWriter(s.getOutputStream(),true);
String line;
while((line=bfr.readLine())!=null){
out.println(line);
}
s.shutdownOutput();
System.out.println("HelloWorld!");
BufferedReader bfIn=new BufferedReader(
newInputStreamReader(s.getInputStream()));
System.out.println(bfIn.readLine());
bfr.close();
s.close();//关闭链接;
}
}
class TextServer {
public static voidmain(String[] args) throws Exception{
ServerSocket ss=newServerSocket(13000);//创建服务端ServerSocket,负责监听一个端口号,接收服务端请求,
Socket s=ss.accept();接受客户端数据,返回一个Socket
BufferedReader bfIn=newBufferedReader(
newInputStreamReader(s.getInputStream()));
PrintWriter pw=newPrintWriter(
newFileWriter("server.java"),true);
String line;
System.out.println("HelloWorld!");
while((line=bfIn.readLine())!=null){
pw.println(line);
}
System.out.println("HelloWorld!");
PrintWriter out=newPrintWriter(s.getOutputStream(),true);
out.println("上传成功");
pw.close();
s.close();关闭与客户端的链接
ss.close();//关闭服务端口
}
}
以下是通过UDP方式传输数据的小程序
class UdpSend {
public static voidmain(String[] args) throws Exception{
DatagramSocket ds=newDatagramSocket();//创建一个DatagramSocket,用于发送数据包
BufferedReader bfr=newBufferedReader(
newInputStreamReader(System.in));
String line;
while((line=bfr.readLine())!=null){
byte[] buf=line.getBytes();
/*创建一个数据包,用于存储将要发送的数据的数据,并指定对方的IP地址及其监听的端口*/
DatagramPacketdp=new DatagramPacket(buf,buf.length,
InetAddress.getByName("192.168.1.155"),10000);
ds.send(dp);//将数据发送出去
if("886".equals(line))
break;
}
ds.close();
}
}
class UdpRece
{
public static voidmain(String[] args)throws Exception
{
DatagramSocket ds=newDatagramSocket(10000);//创建一个DatagramSocket 监听端口
while(true)
{
byte[] buf=new byte[1024];
DatagramPacket dp=
new DatagramPacket(buf,buf.length);//创建固定长度的数据包
ds.receive(dp);//接收到客户端的数据,接下来读取数据
String ip=dp.getAddress().getHostAddress();
String data=
new String(dp.getData(),0,dp.getLength());
int port=dp.getPort();
System.out.println(ip+"::"+data+"::"+port);
if("886".equals(data))
break;
}
ds.close();
}
}
TCP广泛应用于访问各网站的服务器程序中,UDP则主要应用于聊天程序的编写,但在登陆时也会用到TCP协议。
-----------------------android培训、java培训、java学习型技术博客、期待与您交流!----------------------
详情请查看:http://edu.csdn.net/heima