目录
一:TCP传输步骤
二:TCP传输-客户端思路和TCP传输-服务器端思路
TCP传输-客户端思路
TCP传输-服务器端思路
三:例子
1:简单客户端与服务器例子
2:客户机与服务器互相通信
一:TCP传输步骤
Socket和ServerSocket
建立客户端和服务器端
建立连接后,通过Socket中的IO流进行数据的传输
关闭socket
同样,客户端与服务器端是两个独立的应用程序。
二:TCP传输-客户端思路和TCP传输-服务器端思路
TCP传输-客户端思路
1、创建客户端的Socket对象
Socket(InetAddress address, int port)创建流套接字并将其连接到指定IP地址的指定端口号
Socket(String host, int port)创建流套接字并将其连接到指定主机上的指定端口号
2、获取输出流,往IO通道写数据
public OutputStream getOutputStream()throws IOException返回此套接字的输出流
3、释放资源
TCP传输-服务器端思路
1、创建服务器端的Socket对象 ServerSocket
ServerSocket(int port) //创建绑定到指定端口的服务器套接字。
2、监听客户端连接,返回一个对应的客户端的Socket对象
public Socket accept()throws IOException侦听要连接到此套接字并接受它。 //该方法将阻塞直到建立连接。
3、获取输入流对象,读取数据,显示在控制台上
public InputStream getInputStream() throws IOException返回此套接字的输入流。
4、释放资源
三:例子
1:简单客户端与服务器例子
package day34;
import java.io.OutputStream;
import java.net.Socket;
public class Client {
public static void main(String[] args) throws Exception{
//创建客户端对象
Socket localhost = new Socket("localhost", 1234);
//获取输出流写入数据
OutputStream outputStream = localhost.getOutputStream();
byte[] bytes = "hello".getBytes();
outputStream.write(bytes);
//关闭资源
localhost.close();
}
}
package day34;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) throws Exception{
//获取服务器端对象
ServerSocket serverSocket = new ServerSocket(1234);
//获取输入流读取数据
Socket accept = serverSocket.accept();
InputStream inputStream = accept.getInputStream();
byte[] b =new byte[1024];
int l=0;
while((l=inputStream.read(b))!=-1){
String s = new String(b, 0,l);
System.out.println(serverSocket.getInetAddress()+":"+s);
}
//关闭资源
serverSocket.close();
}
}
2:客户机与服务器互相通信
package day34;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;
public class Client1 {
public static void main(String[] args) throws Exception{
//创建服务器对象
Socket localhost = new Socket("localhost", 1234);
//创建Scanner对象
Scanner scanner = new Scanner(System.in);
//获得输入输出流
OutputStream outputStream = localhost.getOutputStream();
InputStream inputStream = localhost.getInputStream();
//创建聊天,当发送886时结束聊天
while(true){
String s=scanner.next();
outputStream.write(s.getBytes());
if("886".equals(s)){
System.out.println("聊天结束");
localhost.close();
break;
}
byte[] b=new byte[1024];
int l=0;
int read = inputStream.read(b);
String s1 = new String(b, 0, read);
System.out.println("服务器反馈:"+s1);
}
}
}
package day34;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class ServerTest1 {
public static void main(String[] args) throws Exception{
//创建客户机对象
ServerSocket serverSocket = new ServerSocket(1234);
Socket accept = serverSocket.accept();
//获取输入流和输出流对象
InputStream inputStream = accept.getInputStream();
OutputStream outputStream = accept.getOutputStream();
Scanner scanner = new Scanner(System.in);
//创建聊天,当收到886时结束聊天
while(true) {
byte[] b = new byte[1024];
int l = 0;
int read = inputStream.read(b);
String s = new String(b, 0, read);
System.out.println("客户机消息:" + s);
if("886".equals(s)){
System.out.println("聊天结束");
serverSocket.close();
break;
}
String s1 = scanner.next();
outputStream.write(s1.getBytes());
}
}
}