网络编程TCP协议
课程大纲
一、 TCP程序概述
1、 TCP是一种可靠传输协议,是一种面向链接的协议。
2、 实现TCP,需要实现服务器端和客户端,JavaAPI为我们提供了java.net包,为实现网络应用程序提供类。
3、 ServerSocket:此类实现服务器端套接字,
4、 Socket:此类实现客户端套接字(也可以叫套接字)
5、 Socket是网络驱动层提供给应用程序编程的接口和一种机制。
二、 数据发送过程
1、
三、 数据接收过程
1、
四、 实现服务器端和客户端程序
(1)、服务器端:
1、 服务器端:public class ServerSocket extends Object
2、 此类实现服务器端套接字,服务器端套接字等待请求通过网络接入,他基于该请求执行某些操作,然后可能向请求者返回结果。
3、 ServerSocket(int port):创建绑定到特定端口的服务器套接字。
4、 Void serSo_Timeout(int timeout):通过制定超时值启用/禁用So_TIMEOUT,以毫秒为单位
5、 InetAddress getInetAddress():返回此服务器套接字的本地地址。
6、 Socket accept():侦听并接受到此套接字的连接。
(2)、客户端:
1、public class Socket extens Object
2、此类实现客户端套接字,套接字是两台机器通信的端点。
3、Socket(String host,int port):创建一个流套接字并将其连接到指定主机上的指定端口。
4、InputStream getInputStream():返回此套接字的输入流。
5、OutputStream getOutputStream():返回此套接字的输出流。
6、void setSo_Timeout(int timeout):启用/禁用带有指定超时值得SO_TIMEOUT,以毫秒为单位。
服务端代码
package us.google;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
/**
*
* @author chongrubujing
*
*/
public class ServerDemo {
public static void main(String[] args) {
//创建一个服务器端的Socket
try {
ServerSocket ss = new ServerSocket(8888);
System.out.println("服务器已经启动,正在等待连接中。。。。。");
Socket s = ss.accept();//等待客户端连接,会阻塞
String info = "亲,您的宝贝已经发货,请注意查收!";
//构造 一个字符输出流
BufferedWriter bw = new BufferedWriter(
new OutputStreamWriter(s.getOutputStream()));
bw.write(info);
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
客户端代码
package us.google;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.UnknownHostException;
/**
* TCP客户端程序
* @author chongrubujing
*
*/
public class ClientDemo {
public static void main(String[] args) {
//创建一个客户端的Socket对象(IP/主机名,端口号)
try {
Socket s = new Socket("192.168.0.51",8888);
System.out.println("与服务器连接成功");
//构造一个字符输入利于
//s.getInputStream()返回此套接字的输入流
BufferedReader br = new BufferedReader(
new InputStreamReader(s.getInputStream()));
String info = br.readLine();
System.out.println(info);
br.close();
s.close();
}catch(UnknownHostException e){
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
}
}