Android学习笔记17——TCP/IP socket编程
2011-04-15 22:34
274 查看
先来介绍下网络协议:
TCP/IP
Transmission Control Protocol 传输控制协议
Internet Protocol 互联网协议
UDP
User Datagram Protocol 用户数据协议
连接协议:
分为:
面向连接协议: Connection Oriented Protocol
非连接协议: Connectionless Protocol
1).面向连接协议是指两台电脑在传输数据前,先会建立一个专属的连接。就如电信局的交换机会为打电话双方提供专属连接一样。
Internet上的面向连接协议就是
TCP/IP
特点:确认回应;分组序号;流量控制。
TCP/IP属于可靠性传输,适合不容许有传输错误的网络程序设计使用
2).非连接协议:无专属连接,无分组,容错,距离短,可同时对多台电脑进行数据传输
Internet上的非连接协议就是
UDP
TCP在网络通信上有极强的生命力,例如远程连接(
Telnet
)和文件传输(
FTP
)都需要不定长度的数据被可靠地传输。相比之下
UDP
操作简单,而且仅需要较少的监护,因此通常用于局域网高可靠性的分散系统中
client/server
应用程序。
Socket 是程序与网络间的一种接口,大部分网络应用程序都是点对点的,所谓点就是服务器端和客户端所执行的程序。
Socket
是用来接收和传送分组的一个端点。
java的
Socket
编程要用到
java.net
包,最常用的是
net
包下的
6
个类:
InetAddress(
互联网协议
(IP)
地址
)
类,
Socket(
套接字
)
类,
ServerSocket(
套接字服务器
)
类,
DatagramSocket(
发送和接收数据报包的套接字
)
类,
DatagramPacket(
数据报包
)
类,
MulticastSocket(
多播数据报套接字类用于发送和接收
IP
多播包
)
类,其中
InetAddress
、
Socket
、
ServerSocket
类是属于
TCP
面向连接协议,
DatagramSocket
、
DatagramPacket
和
MulticastSocket
类则属于
UDP
非连接协议的传送类。
——From: http://cuishen.iteye.com/blog/242842
TCP 通信模型
Socket模型
示例代码:
UdpServer.java
UdpClient.java
TcpServer.java
TcpClient.java
TCP/IP
Transmission Control Protocol 传输控制协议
Internet Protocol 互联网协议
UDP
User Datagram Protocol 用户数据协议
连接协议:
分为:
面向连接协议: Connection Oriented Protocol
非连接协议: Connectionless Protocol
1).面向连接协议是指两台电脑在传输数据前,先会建立一个专属的连接。就如电信局的交换机会为打电话双方提供专属连接一样。
Internet上的面向连接协议就是
TCP/IP
特点:确认回应;分组序号;流量控制。
TCP/IP属于可靠性传输,适合不容许有传输错误的网络程序设计使用
2).非连接协议:无专属连接,无分组,容错,距离短,可同时对多台电脑进行数据传输
Internet上的非连接协议就是
UDP
TCP在网络通信上有极强的生命力,例如远程连接(
Telnet
)和文件传输(
FTP
)都需要不定长度的数据被可靠地传输。相比之下
UDP
操作简单,而且仅需要较少的监护,因此通常用于局域网高可靠性的分散系统中
client/server
应用程序。
Socket 是程序与网络间的一种接口,大部分网络应用程序都是点对点的,所谓点就是服务器端和客户端所执行的程序。
Socket
是用来接收和传送分组的一个端点。
java的
Socket
编程要用到
java.net
包,最常用的是
net
包下的
6
个类:
InetAddress(
互联网协议
(IP)
地址
)
类,
Socket(
套接字
)
类,
ServerSocket(
套接字服务器
)
类,
DatagramSocket(
发送和接收数据报包的套接字
)
类,
DatagramPacket(
数据报包
)
类,
MulticastSocket(
多播数据报套接字类用于发送和接收
IP
多播包
)
类,其中
InetAddress
、
Socket
、
ServerSocket
类是属于
TCP
面向连接协议,
DatagramSocket
、
DatagramPacket
和
MulticastSocket
类则属于
UDP
非连接协议的传送类。
——From: http://cuishen.iteye.com/blog/242842
TCP 通信模型
Socket模型
示例代码:
UdpServer.java
package me.bym.udp; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException; public class UdpServer { public static void main(String[] args) { // 声明UPD socket,即DatagramSocket DatagramSocket socket = null; try { // 产生DatagramSocket对象,制定监听端口 socket = new DatagramSocket(1234); // 设置消息读取缓冲区 byte data[] = new byte[512]; // 声明和定义UDP数据包,内容是消息缓冲区的内容 DatagramPacket packet = new DatagramPacket(data, data.length); // 调用阻塞方法receiver接受客户端发来的内容存放到消息缓冲区packet中 socket.receive(packet); // 打印消息 String msg = new String(packet.getData(), packet.getOffset(), packet.getLength()); System.out.println(msg); } catch (SocketException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { // 关闭socket socket.close(); } } }
UdpClient.java
package me.bym.udp; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; public class UdpClient { public static void main(String[] args) { DatagramSocket socket = null; String msg = null; try { socket = new DatagramSocket(); // 从标准输入(键盘)读取数据 BufferedReader reader = new BufferedReader(new InputStreamReader( System.in)); while (!(msg = reader.readLine()).equalsIgnoreCase("exit")) { // 产生一个InetAddress,内容是服务器端的IP InetAddress serverAddress = InetAddress.getByName("127.0.0.1"); // 构造要发送消息的数据报, 并制定服务器监听的端口 DatagramPacket packet = new DatagramPacket(msg.getBytes(), msg.getBytes().length, serverAddress, 1234); // 发送数据报 socket.send(packet); } } catch (SocketException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { socket.close(); } } }
TcpServer.java
package me.bym.tcp; import java.io.IOException; import java.io.InputStream; import java.net.ServerSocket; import java.net.Socket; public class TcpServer { public static void main(String[] args) { // 声明一个服务器端socket ServerSocket serverSocket = null; // 声明一个socket来接受客户端连接 Socket socket = null; try { int temp; // 定义服务器端socket并指定监听端口 serverSocket = new ServerSocket(5937); // 调用阻塞式方法来获取客户端连接的socket socket = serverSocket.accept(); // 获取客户端socket的输入流 InputStream inputStream = socket.getInputStream(); // 读取客户端socket的输入流的内容并输出 byte[] buffer = new byte[512]; while ((temp = inputStream.read(buffer)) != -1) { System.out.println(new String(buffer, 0, temp)); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { try { socket.close(); serverSocket.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
TcpClient.java
package me.bym.tcp; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.Socket; import java.net.UnknownHostException; public class TcpClient { public static void main(String[] args) { // 声明一个socket Socket socket = null; try { String msg = null; // 产生socket对象,制定服务器地址和服务器监听的端口号 socket = new Socket("127.0.0.1", 5937); // 从标准输入(键盘)读取内容,获取socket的输出流,将读取到的内容放入输出流中 BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); OutputStream outputStream = socket.getOutputStream(); while (!(msg = reader.readLine()).equalsIgnoreCase("exit")) { outputStream.write(msg.getBytes()); } } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { try { socket.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
相关文章推荐
- Android学习笔记17——TCP/IP socket编程
- 程序员面试宝典随笔记(一)-----TCPIP和socket编程面试技巧
- SOCKET 编程TCP/IP、UDP
- android开发第四弹--网络编程之socket tcp/ip udp http(一)
- Socket网络编程,TCP/IP和Http等网络协议理解
- TCP/IP的Socket编程
- SOCKET 编程TCP/IP、UDP
- Socket编程-TCP/IP数据包格式详解-包括数据链路层的头部
- unix学习笔记-----王保明学习笔记-----socket编程进阶---tcpip的11中状态
- 聊聊Socket、TCP/IP、HTTP、FTP及网络编程
- TCP/IP的Socket编程
- [C++] Windows下的socket编程(这是一个简单的TCP/IP例子)
- VC++ Socket编程 简单的Tcp/ip客户端
- Socket编程实践(1) --TCP/IP简述
- 【项目】基于TCP/IP的socket编程之心跳机制
- 聊聊Socket、TCP/IP、HTTP、FTP及网络编程
- Linux TCP/IP Socket编程
- 网络编程--Socket、TCP/IP、UDP、Http之间的关系
- 《Java TCP/IP Socket 编程 》读书笔记之十一:深入剖析socket——TCP套接字的生命周期
- 聊聊Socket、TCP/IP、HTTP、FTP及网络编程