网络编程基础
- 什么是TCP/IP协议?
- TCP/IP有哪两种传输协议,各有什么特点?
- 什么是URL?
- URL和IP地址有什么样的关系?
- 什么叫套接字(Socket)?
- 套接字(Socket)和TCP/IP协议的关系?
- URL和套接字(Socket)的关系?
服务端和客户端的通信方式
- 1.服务器端:
通过ServerSocket监听某个端口的链接情况,Socket负责服务器(客户端)整个信息的连接,我的理解:ServerSocket相当于是学校的快递接收站,socket相当于是相当于是快递员。
- 2.整个过程(TCP面向连接的传输):
服务器端首先声明一个ServerSocket对象并且指定端口号,然后调用Serversocket的accept()方法接收客户端的数据。accept()方法在没有数据进行接收的处于堵塞状态。一旦接收到数据,通过inputstream读取接收的数据。
客户端创建一个Socket对象,指定服务器端的ip地址和端口号(Socketsocket=newSocket(“172.168.10.108”,8080);),通过inputstream读取数据,获取服务器发出的数据,最后将要发送的数据写入到outputstream即可进行TCP协议的socket数据传输。
代码示例
服务器端
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class ChatServer {
private int port = 8200;
public ChatServer(){
}
public ChatServer(int port){
this.port = port;
}
private void server() {
try {
ServerSocket server = new ServerSocket(port);
Socket socket = server.accept();
try{
DataInputStream dis = new DataInputStream(socket.getInputStream());
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
Scanner in = new Scanner(System.in);
while(true){
String in_message = dis.readUTF();
System.out.println(in_message);
String out_message = in.nextLine();
System.out.println("服务器:"+out_message);
dos.writeUTF("服务器:"+out_message);
}
}finally{
socket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new ChatServer().server();
}
}
客户端
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.util.Scanner;
public class ChatClient {
private String host = "192.168.0.101";//默认主机
private int port = 8200; //默认端口号
public ChatClient(){
}
//带参数的构造方法
public ChatClient(String host,int port){
this.host = host;
this.port = port;
}
public void client(){
try {
Socket socket = new Socket(host, port);
try{
// 读取端口数据
DataInputStream dis = new DataInputStream(socket.getInputStream());
// 从端口发送数据
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
while(true){
// 最好开始一步,客户端向服务端发送数据,并建立连接
Scanner in = new Scanner(System.in);
String line = in.nextLine();
System.out.println("客户端:"+line);
dos.writeUTF("客户端:"+line);
// 客户端接收指定服务器固定端口的信息
String in_messqge = dis.readUTF();
System.out.println(in_messqge);
}
}
finally{
socket.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
new ChatClient().client();
}
}