黑马程序员_java网络编程

来源:互联网 发布:域名edu代表什么意思 编辑:程序博客网 时间:2024/05/24 00:57


------------- android培训、java培训、java博客、java学习型技术博客、期待与您交流! --------------

1. Java中基于套接字的通信,它使程序能将网络操作看成文件I/O——程序能够读取套接字,也能够写入套接字,就如同读写文件那样简单。套接字就是一种软件架构,表示连接的一端。套接字包括流套接字和数据包套接字。
2. tcp协议: 利用流套接字,一个进程就能够与另一个进程建立连接。当建立好了连接时,进程间的数据流动就是连续的流。流套接字被认为是提供面向连接的服务,用来进行传输的协议是流行的TCP协议。
3. udp协议: 利用数据报套接字,传输的是单个信息包(最大64k)。对多数程序员而言,不适合使用数据报套接字,因为它使用的协议是UDP是面向无连接服务,所以无法保证包会以任何特定的顺序到达。使用UDP,甚至可能丢失包或重复接收到包。如果选择UDP的话,要通过大量的额外编程来解决这些问题。对于不要求进行错误检查和依赖于TCP的网络程序而言,UDP是合适的。


4. TCP传输客户端建立的思路:
 (1). 建立tcp的客户端socket服务,使用socket对象,完成,建立在创建客户端对象时就明确服务端的地址和端口。
 (2). 如果连接成功建立,意味着数据传输通道(io流)就有了。也就是网络IO流已经存在。可获取网络IO流对象,使用输出流,从客户端发送数据给客户端。
 (3). 通过输出流对象的write方法将数据写到目的地,目的地就是连接的另一端(网络)。
 (4). 关闭资源。
 
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class TcpServer
{
 public static void main(String[] args)throws Exception
 {
  ServerSocket ss = new ServerSocket(10004);
  
  Socket s = ss.accept();
  
  String ip = s.getInetAddress().getHostAddress();
  System.out.println(ip + "...connected");
  
  InputStream in = s.getInputStream();
  
  byte[] buffer = new byte[1024];
  int length = in.read(buffer);
  
  System.out.println(new String(buffer, 0, length));
  
  OutputStream out = s.getOutputStream();
//  Thread.sleep(5000);
  out.write("客户端你好,服务端收到".getBytes());
  
  s.close();
  ss.close(); 
 }
}

import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

public class TcpClient
{
 public static void main(String[] args) throws Exception
 {
  Socket s = new Socket("localhost", 10004);
  
  OutputStream out = s.getOutputStream();
  
  out.write("服务端,你好".getBytes());
  
  InputStream in = s.getInputStream();
  
  byte[] buffer = new byte[1024];
  int length = in.read(buffer);
  
  System.out.println(new String(buffer, 0, length));
  
  s.close();
 }
}

5. 传输客户端建立的思路:

(1). 创建UDP发送端的思路:
 1) 先建立UDP的Socket服务。DatagramSocket ds  = new DatagramSocket();
 2) 确定具体的数据。String str = "UDP,I am  coming!";char[] buf = str.getBytes();
 3) 将数据放在Datagrampacket包中进行封装,并明确目的地地址。DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.170"),端口号:1000);
 4) 使用Socket服务的send方法将数据包发送出去。ds.send();
 5) 关闭资源。ds.close();

(2). 创建接收端的思路:
 1) 建立UDP的Socket服务。必须制定一个具体的数据标志,明确端口号。DatagramSokc ds = new DatagramSocket(1000);
 2) 创建一个数据包对象,用于存储接收到的数据。byte[] buf = new byte[1024];DatagramPacket dp = new DatagramPacket(buf,buf.length);
 3) 使用socket服务接受数据并存储到已有的数据包中。ds.receive(dp);
 4) 从数据包中获取指定的数据,并打印。
  String ip = dp.getAddress().getHostAddress();
  int port = dp.getPort();
  String text = new String(dp.getData(),0,dp.getLength());
  System.out.println(ip+port);
 5) 关闭socket服务。
  ds.close();




------------- android培训、java培训、java博客、java学习型技术博客、期待与您交流! --------------


0 0