网络编程三要素
两台计算机之间通信的必要素
【2】端口号:计算机中应用的标号(代表一个应用程序)
0-1024系统使用或保留端口 ,
有效端口0-65536
【3】通信协议:通信的规则
TCP,UDP
1. IP地址
1.1 IP地址的表示方法
1.2 IP地址所对应对象->InetAddress的方法
2. 端口
端口是虚拟的概念,并不是说在主机上真的有若干个端口。通过端口,可以在一个主机上运行多个网络应用程序。
3. 传输协议
3.1
不需要建立连接,
数据包的大小限制在64k内,
效率较高,不安全,容易丢包
TCP:相当于打电话,需要建立连接,
效率相对比较低,数据传输安全,
三次握手完成。
(客户端和服务端建立连接,给服务端发送“心跳包(没啥内容,就是试探性的)",服务端接收后给客户端返回,客户端接收服务端返回的信息后建立连接)
(点名答到确认)
3.2 基于
TCP协议的Socket编程 3.2.1 Socket概念 :
3.2.2 基于TCP协议的Socket编程
客户端编写:
服务端编写:
3.2.3 Socket中对象的传递
3.2.4 使用多线程进行网络编程
ThreadLogin类:
public class ThreadLogin extends Thread{
private Socket client;
@Override
public void run() {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//获取客户端的输入流
InputStream is;
ObjectInputStream ois;
Object obj;
try {
is = client.getInputStream();
ois = new ObjectInputStream(is);
obj = ois.readObject();
System.out.println(obj);
ois.close();
is.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} Server 类:
public class Server {
public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
ServerSocket server = new ServerSocket(8889);
while (true) {
//一旦有客户端接入,获取客户端
Socket client = server.accept();
new ThreadLogin(client).start();;
}
}
}
Client类:
public class Client {
public static void main(String[] args) throws UnknownHostException, IOException {
for (int i = 0; i < 10; i++) {
Socket client = new Socket(InetAddress.getLocalHost(),8889);
OutputStream os = client.getOutputStream();
//将输出流转换成对象流
ObjectOutputStream oos = new ObjectOutputStream(os);
oos.writeObject(new User("小明","abs12345"));
oos.flush();
client.shutdownOutput();
oos.close();
os.close();
}
}
}