------------- 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学习型技术博客、期待与您交流! --------------