基于TCP协议的Socket网络通信
用来实现双向安全连接网络通信
TCP Socket通常用来实现client-server连接,建立连接时所需的寻址信息为远程计算机的IP地址和端口号(Port Number)
TCP Socket通信模型
案例二
用来实现双向安全连接网络通信
TCP Socket通常用来实现client-server连接,建立连接时所需的寻址信息为远程计算机的IP地址和端口号(Port Number)
TCP Socket通信模型
进行网络通信时,Socket需要借助数据流来完成数据的传递工作
TCP Socket网络编程一般可以分成如下4个步骤进行
案例一
需求:实现服务器接受客户端从键盘输入的内容,并可以连续接受
package com.qf.day24_3;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
/**
* TCP服务端
* @author wgy
*
*/
public class TCPServer {
public static void main(String[] args) throws Exception {
//1创建服务器套接字
ServerSocket listener=new ServerSocket(10010);
System.out.println("服务器已启动...");
//2侦听
Socket socket=listener.accept();
//3获取输入流
BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line=null;
while((line=br.readLine())!=null){
System.out.println(socket.getInetAddress().getHostAddress()+"说:"+line);
if(line.equals("886")){
break;
}
}
//4关闭
br.close();
socket.close();
listener.close();
}
}
package com.qf.day24_3;
import java.io.BufferedWriter;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.util.Scanner;
/**
* TCP客户端
* @author wgy
*
*/
public class TCPClient {
public static void main(String[] args) throws Exception {
//1创建Socket
Socket socket=new Socket("localhost",10010);
//2获取输出流
OutputStream os=socket.getOutputStream();
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(os));
//3写
Scanner input=new Scanner(System.in);
while(true){
String s=input.nextLine();
bw.write(s);
bw.newLine();
bw.flush();
if(s.equals("886")){
break;
}
}
//4关闭
bw.close();
socket.close();
}
}
案例二
需求:将案例一实现多客户请求
package com.qf.day24_4;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
/**
* socket线程类
*
* @author wgy
*
*/
public class SocketThread extends Thread {
private Socket socket;
public SocketThread(Socket socket) {
// TODO Auto-generated constructor stub
this.socket = socket;
}
@Override
public void run() {
BufferedReader br = null;
try {
// 1获取输入流
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line = null;
while ((line = br.readLine()) != null) {
System.out.println(socket.getInetAddress().getHostAddress()+ "说:" + line);
if (line.equals("886")) {
System.out.println(socket.getInetAddress().getHostAddress()+ "离开了...");
break;
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
// e.printStackTrace();
System.out.println(socket.getInetAddress().getHostAddress()
+ "离开了...");
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
package com.qf.day24_4;
import java.net.ServerSocket;
import java.net.Socket;
/**
* TCP服务器聊天室
*
* @author wgy
*
*/
public class TCPChatServer {
public static void main(String[] args) throws Exception {
// 1服务器套接字
ServerSocket listener = new ServerSocket(8800);
//
System.out.println("聊天室 已启动....");
while (true) {
Socket socket=listener.accept();
new SocketThread(socket).start();
}
}
}
package com.qf.day24_4;
import java.io.BufferedWriter;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.util.Scanner;
/**
* TCP客户端
* @author wgy
*
*/
public class TCPClient {
public static void main(String[] args) throws Exception {
//1创建Socket
Socket socket=new Socket("localhost", 8800);
//2获取输出流
OutputStream os=socket.getOutputStream();
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(os));
//3写
Scanner input=new Scanner(System.in);
while(true){
String s=input.nextLine();
bw.write(s);
bw.newLine();
bw.flush();
if(s.equals("886")){
break;
}
}
//4关闭
bw.close();
socket.close();
}
}
需求:实现文件上传功能,客户端发送文件,服务端接受文件
package com.qf.day24_5;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
/**
* TCP文件服务端
* @author wgy
*
*/
public class TCPFileServer {
public static void main(String[] args) throws Exception{
//1创建ServerSocket
ServerSocket listener=new ServerSocket(9999);
//2侦听
System.out.println("服务器已启动....");
Socket socket=listener.accept();
//3获取输入流
InputStream is=socket.getInputStream();
FileOutputStream fos=new FileOutputStream("d:\\bb.jpg");
byte[] buf=new byte[1024*4];
int len=0;
while((len=is.read(buf))!=-1){
fos.write(buf, 0, len);
}
//4关闭
fos.close();
is.close();
socket.close();
listener.close();
System.out.println("接受完毕");
}
}
package com.qf.day24_5;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.net.Socket;
/**
* TCP文件发送客户端
* @author wgy
*
*/
public class TCPFileClient {
public static void main(String[] args) throws Exception {
//1创建Socket
Socket socket=new Socket("localhost",9999);
//2获取输出流
OutputStream os=socket.getOutputStream();
//3创建文件输入流
FileInputStream fis=new FileInputStream("d:\\791.jpg");
byte[] buf=new byte[1024*4];
int len=0;
while((len=fis.read(buf))!=-1){
os.write(buf, 0, len);
}
//4关闭
fis.close();
os.close();
socket.close();
}
}
案例四
需求:基于TCP协议实现一个聊天程序,客户端发送一条数据,服务器端发送一条数据
package com.qf.Task1;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
/**
* 服务器端
* @author Administrator
*
*/
public class ChatServer {
public static void main(String[] args) throws Exception{
System.out.println("开始聊天");
ServerSocket listeren = new ServerSocket(8800);
Socket socket = listeren.accept();
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
String line=null;
Scanner input = new Scanner(System.in);
while((line=br.readLine())!=null){
System.out.println(socket.getInetAddress().getHostAddress()+"说:"+line);
String s = input.nextLine();
bw.write(s);
bw.newLine();
bw.flush();
if (line.equals("886")) {
break;
}
}
br.close();
socket.close();
}
}
package com.qf.Task1;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.util.Scanner;
/**
* 客户端
* @author Administrator
*
*/
public class ChatUser {
public static void main(String[] args) throws Exception{
Socket socket = new Socket("localhost",8800);
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
Scanner input = new Scanner(System.in);
while(true){
String s = input.nextLine();
bw.write(s);
bw.newLine();
bw.flush();
String line = null;
if ((line = br.readLine())!=null) {
System.out.println(socket.getInetAddress().getHostAddress()+"说:"+line);
}
if (s.equals("886")) {
break;
}
}
bw.close();
socket.close();
}
}