-------
android培训、
java培训、期待与您交流! ----------
基于TCP/IP协议Socket通信
TCP/IP(Transmission Control Protocol传输控制协议/Internet Protocol网间协议)
1,是Internet的主要协议,定义了计算机和外设进行通信所使用的规则;TCP/IP网络参考模型包括五个层次:应用层、传输层、网络层、链路层、物理层。
2,网络通讯中数据传输的模式:
面向连接(TCP)------打电话
无连接(UDP,User Datagram Protocol)---发邮件、短信
3,套接字Socket
网络中双向通讯中的某一端称为一个Socket
在Java中分为客户端套接字Socket类和服务器端套接字ServerSocket类
4,Socket通讯的基本原理
Socket可以看成在两个程序进行通讯连接中的一个端点,一个程序将一段信息写入Socket中,该Socket将这段信息发送给另外一个Socket,从而也就使得这段信息能传送 到其他程序中。
通讯的主要过程包括:Socket的建立、监听、连接、发送数据和接收数据等环节。
5,端口号
主要是区分服务类别(服务器端所提供的功能)——如:WWW:80、telnet:21、ftp: 23、smtp:25、pop3:110等。
在同一时间内所进行的多个不同的网络会话
端口号是一个16位无符号整数,范围是0-65535,以区别主机上的每一个程序(端口号就像房屋中的房间号);
低于256的短口号保留给标准应用程序,比如pop3的端口号就是110,每一个套接字都组合进了IP地址、端口号,这样形成的整体就可以区别每一个套接字。
Socket通讯实现中客户/服务器端双方的程序
通讯的方式:“一对一”(一个服务器对应一个客户机);“一对多”(一个服务器对应多个连接的客户机);
Java的基于TCP的网络编程非常简单化,不再需要考虑底层的网络TCP/IP协议等复杂的编程实现细节。 只需要按照通过 Socket获得输入输出流对象,再用标准的 I/O 流的数据读写进行数据传送和接受
Socket通讯的编程步骤 :
根据程序的身份分别创建出客户端和服务器端套接字以联通。
双方利用Socket类中的getInputStream()、getOutputStream()得到对应的输入输出流。
双方读写数据(输入输出)。
关闭Socket及ServerSocket流(应先关闭输入输出流)。
*****************************************************************TCP程序练习**********************************************************************************
服务器端:
import java.net.*;
import java.io.*;
public class HelloServer{
public static void main(String args[]) throws Exception{
ServerSocket server = null ; //声明serversocket对象
Socket client = null; //一个socket就是一个客户端
PrintStream out = null ;
server = new ServerSocket(8888);//服务器在8888端口上等待客户端访问
System.out.println("服务器运行,等待连接");
client = server.accept();
String str = "hello world";
out = new PrintStream(client.getOutputStream());
out.println(str);
out.close();
client.close();
server.close();
}
}
客户端:
import java.net.*;
import java.io.*;
public class HelloClient{
public static void main(String args[]) throws Exception{
Socket client = null; //声明Socket对象
client = new Socket("localhost",8888);
BufferedReader buf = null; //声明BufferedReader对象
buf = new BufferedReader(
new InputStreamReader(
client.getInputStream())); //取得客户端的输入流
String str = buf.readLine();
System.out.println("服务器端输出内容:"+str);
client.close();
buf.close();
}
}
UDP简介
在TCP的所有操作都必须建立可靠的连接,但一定会浪费大量的系统性能,在UDP中,他是不可靠的连接,在各种聊天工具中被广泛应用。
在UDP开发中用DatagramSocket包装一条要发送的信息.
UDP客户端
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class UDPClient{
public static void main(String[] args) throws Exception{
DatagramSocket ds = null;//声明DatagramSocket对象;
byte[] buf = new byte[1024];
DatagramPacket dp = null;//声明DatagramPacket对象;
ds = new DatagramSocket(9000);//定义客户端的端口
dp = new DatagramPacket(buf,1024);
System.out.println("等待接收数据");
ds.receive(dp);
//接收数据
String str = new String(dp.getDate(),0,dp.getlength())+ "from" + dp.getAddress().getHostAddress() + ":" + dp.getPort();
System.out.println(str);
ds.close();
}
}
UDP服务器端
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.new.InetAddress;
public class UDPServer{
public static void main(String[] args) throws Exception{
DatagramSocket ds = null;
DategramPacket dp = null;
ds = new DatagramSocket(3000);
String str = "hello world";
//指定数据内容,长度,发送目标地址,端口
dp = new DatagramPacket(str.getBytes(),str.length(),InetAddress.getByName("localhost"),9000);
System.out.println("发送信息");
ds.send(dp);
ds.close();
}
}
------- android培训、 java培训、期待与您交流! ----------
IP地址:
在互联网上的每台计算机都有一个唯一的标记,这个标记就是IP地址。IP地址使用32位的二进制数据表示,一般实际中看到的IP地址都是以十进制的形式表示的。IP地址的格式为:IP地址=网络地址+主机地址 。IP地址分为五类,A类1.0.0.1~~~~126.255.255.254保留给政府机构。B类128.0.0.1~~~~191.255.255.254分配给中的规模公司。C类
192.0.0.1~~~~~223.255.255.254分配给需要的任何人。D类224.0.0.1~~~~239.255.255.254用于组播,E类240.0.0.1~~~~255.255.255.254用于实验。
InetAddress:
这个类主要表示IP地址,他分别有两个子类:Inet4Address,Inet6Address,分别表示IPV4和IPV6协议。
import java.new .InetAddress;
public class InetAddress{
public static void main (String[] args) throws Exception{
InetAddess loc = null;
InetAddess rem = null;
loc = InetAddess.getLocalHost();//得到本地InetAddress对象
rem = InetAddess.getByName(www.baidu.com);//取得远程的InetAddress对象
System.out.println("本机IP地址:"+loc.getHostAddress);
System.out.println("百度IP地址:"+rem.getHostAddress);
}
}
在互联网上的每台计算机都有一个唯一的标记,这个标记就是IP地址。IP地址使用32位的二进制数据表示,一般实际中看到的IP地址都是以十进制的形式表示的。IP地址的格式为:IP地址=网络地址+主机地址 。IP地址分为五类,A类1.0.0.1~~~~126.255.255.254保留给政府机构。B类128.0.0.1~~~~191.255.255.254分配给中的规模公司。C类
192.0.0.1~~~~~223.255.255.254分配给需要的任何人。D类224.0.0.1~~~~239.255.255.254用于组播,E类240.0.0.1~~~~255.255.255.254用于实验。
InetAddress:
这个类主要表示IP地址,他分别有两个子类:Inet4Address,Inet6Address,分别表示IPV4和IPV6协议。
import java.new .InetAddress;
public class InetAddress{
public static void main (String[] args) throws Exception{
InetAddess loc = null;
InetAddess rem = null;
loc = InetAddess.getLocalHost();//得到本地InetAddress对象
rem = InetAddess.getByName(www.baidu.com);//取得远程的InetAddress对象
System.out.println("本机IP地址:"+loc.getHostAddress);
System.out.println("百度IP地址:"+rem.getHostAddress);
}
}
基于TCP/IP协议Socket通信
TCP/IP(Transmission Control Protocol传输控制协议/Internet Protocol网间协议)
1,是Internet的主要协议,定义了计算机和外设进行通信所使用的规则;TCP/IP网络参考模型包括五个层次:应用层、传输层、网络层、链路层、物理层。
2,网络通讯中数据传输的模式:
面向连接(TCP)------打电话
无连接(UDP,User Datagram Protocol)---发邮件、短信
3,套接字Socket
网络中双向通讯中的某一端称为一个Socket
在Java中分为客户端套接字Socket类和服务器端套接字ServerSocket类
4,Socket通讯的基本原理
Socket可以看成在两个程序进行通讯连接中的一个端点,一个程序将一段信息写入Socket中,该Socket将这段信息发送给另外一个Socket,从而也就使得这段信息能传送 到其他程序中。
通讯的主要过程包括:Socket的建立、监听、连接、发送数据和接收数据等环节。
5,端口号
主要是区分服务类别(服务器端所提供的功能)——如:WWW:80、telnet:21、ftp: 23、smtp:25、pop3:110等。
在同一时间内所进行的多个不同的网络会话
端口号是一个16位无符号整数,范围是0-65535,以区别主机上的每一个程序(端口号就像房屋中的房间号);
低于256的短口号保留给标准应用程序,比如pop3的端口号就是110,每一个套接字都组合进了IP地址、端口号,这样形成的整体就可以区别每一个套接字。
Socket通讯实现中客户/服务器端双方的程序
通讯的方式:“一对一”(一个服务器对应一个客户机);“一对多”(一个服务器对应多个连接的客户机);
Java的基于TCP的网络编程非常简单化,不再需要考虑底层的网络TCP/IP协议等复杂的编程实现细节。 只需要按照通过 Socket获得输入输出流对象,再用标准的 I/O 流的数据读写进行数据传送和接受
Socket通讯的编程步骤 :
根据程序的身份分别创建出客户端和服务器端套接字以联通。
双方利用Socket类中的getInputStream()、getOutputStream()得到对应的输入输出流。
双方读写数据(输入输出)。
关闭Socket及ServerSocket流(应先关闭输入输出流)。
*****************************************************************TCP程序练习**********************************************************************************
服务器端:
import java.net.*;
import java.io.*;
public class HelloServer{
public static void main(String args[]) throws Exception{
ServerSocket server = null ; //声明serversocket对象
Socket client = null; //一个socket就是一个客户端
PrintStream out = null ;
server = new ServerSocket(8888);//服务器在8888端口上等待客户端访问
System.out.println("服务器运行,等待连接");
client = server.accept();
String str = "hello world";
out = new PrintStream(client.getOutputStream());
out.println(str);
out.close();
client.close();
server.close();
}
}
客户端:
import java.net.*;
import java.io.*;
public class HelloClient{
public static void main(String args[]) throws Exception{
Socket client = null; //声明Socket对象
client = new Socket("localhost",8888);
BufferedReader buf = null; //声明BufferedReader对象
buf = new BufferedReader(
new InputStreamReader(
client.getInputStream())); //取得客户端的输入流
String str = buf.readLine();
System.out.println("服务器端输出内容:"+str);
client.close();
buf.close();
}
}
UDP简介
在TCP的所有操作都必须建立可靠的连接,但一定会浪费大量的系统性能,在UDP中,他是不可靠的连接,在各种聊天工具中被广泛应用。
在UDP开发中用DatagramSocket包装一条要发送的信息.
UDP客户端
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class UDPClient{
public static void main(String[] args) throws Exception{
DatagramSocket ds = null;//声明DatagramSocket对象;
byte[] buf = new byte[1024];
DatagramPacket dp = null;//声明DatagramPacket对象;
ds = new DatagramSocket(9000);//定义客户端的端口
dp = new DatagramPacket(buf,1024);
System.out.println("等待接收数据");
ds.receive(dp);
//接收数据
String str = new String(dp.getDate(),0,dp.getlength())+ "from" + dp.getAddress().getHostAddress() + ":" + dp.getPort();
System.out.println(str);
ds.close();
}
}
UDP服务器端
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.new.InetAddress;
public class UDPServer{
public static void main(String[] args) throws Exception{
DatagramSocket ds = null;
DategramPacket dp = null;
ds = new DatagramSocket(3000);
String str = "hello world";
//指定数据内容,长度,发送目标地址,端口
dp = new DatagramPacket(str.getBytes(),str.length(),InetAddress.getByName("localhost"),9000);
System.out.println("发送信息");
ds.send(dp);
ds.close();
}
}
------- android培训、 java培训、期待与您交流! ----------