Java 中根据 TCP 协议进行网络通信
2017-12-13 10:58
232 查看
1.服务器端
import java.net.ServerSocket;
import java.net.Socket;
public class TestStringServer {
@SuppressWarnings("resource")
public static void main(String[] args) {
try {
// 1.创建 ServerSocket 类型的对象,并提供端口号
ServerSocket ss = new ServerSocket(8888);
// 等待客户端的连接请求,使用 accept 方法
while (true) {
System.out.println("等待客户端连接...");
Socket s = ss.accept();
System.out.println("客户端" + s.getInetAddress() + "连接成功!");
new ServerThread(s).start();
}
// ss.close();
} catch (Exception e) {
// TODO: handle exception
}
}
}
2.线程接口内容
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;
public class ServerThread extends Thread {
private Socket s;
public ServerThread(Socket s) {
this.s = s;
}
@Override
public void run() {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
PrintStream ps = new PrintStream(s.getOutputStream());
while (true) {
String str = br.readLine();
if ("bye".equalsIgnoreCase(str)) {
System.out.println("客户端" + s.getInetAddress() + "结束连接!");
break;
}
Date d1 = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(sdf.format(d1) + " 客户端" + s.getInetAddress() + "说:" + str);
// 连接成功发送"I Received!"
ps.println("I Received!");
System.out.println("成功发送数据!");
}
// 4.关闭 Socket
ps.close();
br.close();
s.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
3.客户端内容
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
public class TestStringClient {
public static void main(String[] args) {
try {
// 1.创建 Socket
Socket s = new Socket("192.168.2.1", 8888);
// 2.创建输入信息
BufferedReader bri = new BufferedReader(new InputStreamReader(System.in));
PrintStream ps = new PrintStream(s.getOutputStream());
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
while (true) {
System.out.println("请输入您的信息:");
String msg = bri.readLine();
// ps.println("hello");
ps.println(msg);
System.out.println("");
if ("bye".equalsIgnoreCase(msg)) {
System.out.println("结束对话!");
break;
}
System.out.println("等待对方输入.....");
String str = br.readLine();
System.out.println("对方输入的信息:" + str);
}
// 3.关闭 Socket
br.close();
ps.close();
s.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
import java.net.ServerSocket;
import java.net.Socket;
public class TestStringServer {
@SuppressWarnings("resource")
public static void main(String[] args) {
try {
// 1.创建 ServerSocket 类型的对象,并提供端口号
ServerSocket ss = new ServerSocket(8888);
// 等待客户端的连接请求,使用 accept 方法
while (true) {
System.out.println("等待客户端连接...");
Socket s = ss.accept();
System.out.println("客户端" + s.getInetAddress() + "连接成功!");
new ServerThread(s).start();
}
// ss.close();
} catch (Exception e) {
// TODO: handle exception
}
}
}
2.线程接口内容
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;
public class ServerThread extends Thread {
private Socket s;
public ServerThread(Socket s) {
this.s = s;
}
@Override
public void run() {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
PrintStream ps = new PrintStream(s.getOutputStream());
while (true) {
String str = br.readLine();
if ("bye".equalsIgnoreCase(str)) {
System.out.println("客户端" + s.getInetAddress() + "结束连接!");
break;
}
Date d1 = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(sdf.format(d1) + " 客户端" + s.getInetAddress() + "说:" + str);
// 连接成功发送"I Received!"
ps.println("I Received!");
System.out.println("成功发送数据!");
}
// 4.关闭 Socket
ps.close();
br.close();
s.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
3.客户端内容
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
public class TestStringClient {
public static void main(String[] args) {
try {
// 1.创建 Socket
Socket s = new Socket("192.168.2.1", 8888);
// 2.创建输入信息
BufferedReader bri = new BufferedReader(new InputStreamReader(System.in));
PrintStream ps = new PrintStream(s.getOutputStream());
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
while (true) {
System.out.println("请输入您的信息:");
String msg = bri.readLine();
// ps.println("hello");
ps.println(msg);
System.out.println("");
if ("bye".equalsIgnoreCase(msg)) {
System.out.println("结束对话!");
break;
}
System.out.println("等待对方输入.....");
String str = br.readLine();
System.out.println("对方输入的信息:" + str);
}
// 3.关闭 Socket
br.close();
ps.close();
s.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
相关文章推荐
- TCP、UDP协议,java网络通信基础
- Java TCP使用Socket进行网络通信(3)
- Java TCP使用Socket进行网络通信(4)之往返发送
- 老生常谈Java网络编程TCP通信(必看篇)
- Java基础知识强化之网络编程笔记11:TCP之TCP协议上传文本文件
- 使用C#实现基于TCP和UDP协议的网络通信程序的基本示例
- JAVA系列课程讲座一:使用Socket通信实现网络通信程序(TCP方式)
- Java基础—网络编程【OSI/RM TCP/IP】【网络通信三要素】【UDP传输 & TCP传输】【DNS域名解析】
- Java 网络编程(五) 使用TCP/IP的套接字(Socket)进行通信
- Java系列-Socket网络编程,TCP/IP和Http等网络协议理解
- java 基于TCP的Socket网络通信
- Java中的TCP/UDP网络通信编程
- java 网络编程 [网络传输] [协议] [UDP与TCP] [套接字] [URL与URI]
- 【Java】【网络协议】Http,TCP/IP,Socket,XMMP
- 第六篇:JAVA网络编程之TCP Socket通信中由read返回值造成的的死锁问题(含代码)
- Java TCP使用Socket进行网络文件传送(5)
- Java 网络编程(五) 使用TCP/IP的套接字(Socket)进行通信
- java中进行socket编程实现tcp、udp协议总结
- 黑马程序员——java网络编程中的传输协议:UDP和TCP