TCP和UDP Socket

1.tcp协议的编程

 * 1:客户端。步骤
 *         1:创建Socket对象,构造方法里需要指定服务端的ip地址和端口.
 *         Socket socket = new Socket(服务端的ip地址或者InetAddress对象,服务端的端口);
 *         2:如果想要从服务端读取数据,那么就需要获得输入管道:InputStream
 *           如果想将数据写到服务端,则需要获得输出管道:OutputStream
 *             读取数据:  InputStream is = socket.getInputStream();
 *             发送数据:   OutputStream os = socket.getOutputStream();
 *         3:准备数据,用InputStream来读取数据,或者用OutputStream来向服务端写入数据,
 *             读数据 : is.read(数据)
 *             写数据:os.write(数据)
 *         4:关闭流,关闭Socket。
 *             is.close();
 *             os.close();
 *             socket.close();
 * 2:服务端:步骤
 *     1;创建ServerSocket对象,并且指定监听的端口。
 *     ServerSocket ss = new ServerSocket(9999);
 *     2:调用accept方法,监听是否有客户端连接。如果连接上则分配一个Socket.
 *     3:获得Socket的读取管道和输出管道。再进行读取和写入数据。
 *     4:将Socket关闭。
 *     5:将ServerSocket关闭。

2.TCP的发送和接收

* 发送

// 创建套接字。它会自动到指定ip地址的指定端口。
Socket socket = new Socket("127.0.0.1", 9999);
// 发送数据。
String str = "tcp,我来了";
// 得到输出管道。
OutputStream os = socket.getOutputStream();
os.write(str.getBytes());
os.close();
socket.close();

* 接收

ServerSocket ss = new ServerSocket(9999);
//监听是否有客户端连接到本服务器端。如果有连接,则分配一个Socket。
Socket socket = ss.accept();//阻塞式的方法。
//获得输入管道。
InputStream is = socket.getInputStream();
byte[] b =new byte[1024];
//返回本次读取的字节数量。
int length = is.read(b);
System.out.println(new String(b,0,length));
ss.close();

3.UDP发送和接收

* 发送

InetAddress ia = InetAddress.getLocalHost();//本机地址
Scanner scanner = new Scanner(System.in);
String sendIn = scanner.nextLine();
DatagramSocket socket = new DatagramSocket();
byte[] b = sendIn.getBytes();
DatagramPacket p = new DatagramPacket(b, b.length, ia, 9900);
socket.send(p);
socket.close();   

* 接收

DatagramSocket socket = new DatagramSocket(9900);
byte[] b = new byte[1024];
DatagramPacket p = new DatagramPacket(b, b.length);
socket.receive(p);
System.out.println(p.getAddress().getHostAddress()+p.getPort()+(new String(b,0,b.length)));

 

posted @ 2016-03-02 21:52  嘉禾世兴  阅读(273)  评论(0编辑  收藏  举报