------- android培训、java培训、期待与您交流! ----------
网络编程:
Socket:
就是为网络服务提供的一种机制,通信的两端都有Socket,网络通信其实就是Socket间的通信,数据在两个Socket间通过IO传输。
UDP传输:
1,只要是网络传输,必须有socket 。
2,数据一定要封装到数据包中,数据包中包括目的地址、端口、数据等信息。
直接操作udp不可能,对于java语言应该将udp封装成对象,易于我们的使用,这个对象就是DatagramSocket. 封装了udp传输协议的socket对象。
因为数据包中包含的信息较多,为了操作这些信息方便,也一样会将其封装成对象。这个数据包对象就是:DatagramPacket.通过这个对象中的方法,就可以获取到数据包中的各种信息。
DatagramSocket具备发送和接受功能,在进行udp传输时,需要明确一个是发送端,一个是接收端。
udp的发送端:
1,建立udp的socket服务,创建对象时如果没有明确端口,系统会自动分配一个未被使用的端口。
2,明确要发送的具体数据。
3,将数据封装成了数据包。
4,用socket服务的send方法将数据包发送出去。
5,关闭资源。
1:获取网络中的主机域名和ip地址
try{
// InetAddress ia=InetAddress.getByName("Lenovo");
InetAddressia=InetAddress.getByName("192.168.1.2");
// InetAddressia=InetAddress.getLocalHost();
System.out.println(ia.getHostName());
System.out.println(ia.toString());
} catch(UnknownHostException e) {
// TODOAuto-generated catch block
e.printStackTrace();
}
1.ServerSocket:服务器类
TCP通信
2.Socket:客户端类
二:网络编程类
1.DatagramSocket
UDP通信
2. DatagramPacket
三:ServerSocket类
1:ServerSocket类用来表示服务器套接字。服务器套接字通过指定的端口来等待连接的套接字,他的主要功能是等待来自网络上的连接“请求”。服务器套接字一次可以与一个套接字连接,如果多台客户机同时提出连接请求,服务器套接字会将请求连接的客户机存入队列中,然后从中取出一个套接字,与服务器新建的套接字连接起来,如果请求连接数大于最大容纳数,则多出的请求被拒绝。队列的默认大小为50.
2:ServerSocket类的构造方法:
| ServerSocket() |
| ServerSocket(int port) |
| ServerSocket(int port, int backlog) Backlog:指定队列的最大长度。 |
3:
| 方法摘要 | |
| accept() | |
| void | bind(SocketAddress endpoint) |
| void | bind(SocketAddress endpoint, int backlog) |
| void | close() |
| getInetAddress() | |
| int | getLocalPort() |
| boolean | isBound() |
| boolean | isClosed() |
| toString() | |
4:调用ServerSocket类的accept()方法会返回一个和客户端Socket对象连接的Socket对象。
5:服务器端的Socket对象使用getOutputStream()方法获得的输出流将指向客户端Socket对象使用getInputStream()方法获得的那个输入流。反之也成立。
也就是说:当服务器端向输出流写入信息时,客户端通过相应的输入流就能读取;反之也成立。
6:创建一个服务器套接字:
public static voidmain(String[] args) {
// TODOAuto-generated method stub
try {
ServerSockets=newServerSocket(9999);
System.out.println("成功创建服务器套接字");
while(true){
System.out.println("等待客户端的连接...");
Socketso=s.accept();
System.out.println("与客户端建立连接");
}
} catch(IOException e) {
// TODOAuto-generated catch block
e.printStackTrace();
}
}
四:Socket类
1:Socket类是套接字类。使用Socket类时需要制定待连接的服务器的ip和端口号。服务器套接字与客户端套接字连接成功后,则可以获取套接字的输入输出流,进行数据交换。
2:构造方法:
| 构造方法摘要 | |
|
| Socket() |
|
| Socket(InetAddress address, int port) |
|
| |
|
| Socket(String host, int port, InetAddress localAddr, int localPort) |
host用于指定服务器的ip地址,port是连接服务器的端口号。
五:例:客户端和服务器端的连接:
1:服务器端:
public classHelloServer {
//可以使用telnet进行测试:open localhost 9999
public static voidmain(String[] args) throwsIOException {
//实例化一个服务器端的socket连接
ServerSocket ss=newServerSocket(9999);
//用于向客户端打印输出
PrintWriter out=null;
//实例化一个客户端对象,用于接收客户端的连接
Socket cs=null;
System.out.println("等待客户端连接...");
//通过ServerSocket类中的accept()方法,
//接收客户端的请求,此方法返回一个客户端的Socket请求
cs=ss.accept();
//out就具备了向cs打印的功能
out=newPrintWriter(cs.getOutputStream(),true);
out.println("Hello world");
cs.close();
ss.close();
}
}
客户端:
public classHelloClient {
public static voidmain(String[] args) throwsUnknownHostException, IOException {
//实例化一个Socket对象,在本机的9999端口进行监听
Socketcs=new Socket("localhost",9999);
//次对象用于读取服务器端发送过来的数据
BufferedReaderin=null;
//用来将输入输出流与socket关联
//getInputStream()返回此对象的输入流;然后把输入流转化为字符流
in=newBufferedReader(newInputStreamReader(cs.getInputStream()));
System.out.println(in.readLine());
in.close();
cs.close();
}
}
客户端:
import java.io.*;
import java.net.*;
// 客户端程序
publicclass EchoClient
{
public static void main(String[] args)throws IOException
{
Socket echoSocket = null;
PrintWriter out = null;
BufferedReaderin = null;
try
{
echoSocket = new Socket ("localhost", 1111);
out = newPrintWriter(echoSocket.getOutputStream(), true);
in = new BufferedReader(
newInputStreamReader(echoSocket.getInputStream()));
}
catch (UnknownHostException e)
{
System.err.println("Don't knowabout host: localhost.");
System.exit(1);
}
System.out.println(in.readLine());
System.out.println(in.readLine());
BufferedReader stdIn =
new BufferedReader(newInputStreamReader(System.in));
String userInput;
// 将客户端Socket输入流输出到标准输出
while ((userInput = stdIn.readLine()) !=null)
{
out.println(userInput);
System.out.println(in.readLine());
}
out.close();
in.close();
echoSocket.close();
}
}
------- android培训、java培训、期待与您交流! ----------详细请查看:http://edu.youkuaiyun.com
本文深入讲解Java中的网络编程,包括TCP和UDP通信的基本原理及其实现方式。文章介绍了Socket类和ServerSocket类的使用方法,并提供了客户端和服务端的示例代码。
4639

被折叠的 条评论
为什么被折叠?



