Java的Socket通信简单实例
服务端
package testlxd; import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner; public class Server_Test extends Thread {
ServerSocket server = null;
Socket socket = null; public Server_Test(int port) {
try {
server = new ServerSocket(port);
} catch (IOException e) {
e.printStackTrace();
}
} @Override
public void run() { super.run();
try {
System.out.println(getdate() + " 等待客户端连接...");
socket = server.accept();
new sendMessThread().start();// 连接并返回socket后,再启用发送消息线程
System.out.println(getdate() + " 客户端 (" + socket.getInetAddress().getHostAddress() + ") 连接成功...");
InputStream in = socket.getInputStream();
int len = 0;
byte[] buf = new byte[1024];
while ((len = in.read(buf)) != -1) {
System.out.println(getdate() + " 客户端: ("
+ socket.getInetAddress().getHostAddress() + ")说:"
+ new String(buf, 0, len, "UTF-8"));
} } catch (IOException e) {
e.printStackTrace();
}
} public static String getdate() {
Date date = new Date();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String result = format.format(date);
return result;
} class sendMessThread extends Thread {
@Override
public void run() {
super.run();
Scanner scanner = null;
OutputStream out = null;
try {
if (socket != null) {
scanner = new Scanner(System.in);
out = socket.getOutputStream();
String in = "";
do {
in = scanner.next();
out.write(("" + in).getBytes("UTF-8"));
out.flush();// 清空缓存区的内容
} while (!in.equals("q"));
scanner.close();
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} catch (IOException e) {
e.printStackTrace();
} } } // 函数入口
public static void main(String[] args) {
Server_Test server = new Server_Test(1234);
server.start();
}
}
客户端
package testlxd; import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner; public class Client extends Thread { //定义一个Socket对象
Socket socket = null; public Client(String host, int port) {
try {
//需要服务器的IP地址和端口号,才能获得正确的Socket对象
socket = new Socket(host, port);
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} } @Override
public void run() {
//客户端一连接就可以写数据给服务器了
new sendMessThread().start();
super.run();
try {
// 读Sock里面的数据
InputStream s = socket.getInputStream();
byte[] buf = new byte[1024];
int len = 0;
while ((len = s.read(buf)) != -1) {
System.out.println(getdate() + " 服务器说: "+new String(buf, 0, len,"UTF-8"));
}
} catch (IOException e) {
e.printStackTrace();
}
} //往Socket里面写数据,需要新开一个线程
class sendMessThread extends Thread{
@Override
public void run() {
super.run();
//写操作
Scanner scanner=null;
OutputStream os= null;
try {
scanner=new Scanner(System.in);
os= socket.getOutputStream();
String in="";
do {
in=scanner.next();
os.write((""+in).getBytes());
os.flush();
} while (!in.equals("bye"));
} catch (IOException e) {
e.printStackTrace();
}
scanner.close();
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} public static String getdate() {
Date date = new Date();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String result = format.format(date);
return result;
} //函数入口
public static void main(String[] args) {
//需要服务器的正确的IP地址和端口号
Client clientTest=new Client("127.0.0.1", 1234);
clientTest.start();
}
}
运行效果:
服务端

客户端

以上就是Socket的简单通信实例,实际开发过程按需修改即可,若遇到乱码问题,可尝试通过以下代码进行修改
in = new BufferedReader(new InputStreamReader(socket.getInputStream(),"UTF-8"));
out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(),"UTF-8"));
Java的Socket通信简单实例的更多相关文章
- .net Socket 通信简单实例(初级入门)
c/s控制台应用程序,Server.Client分别在两个项目中 服务端 using System; using System.Collections.Generic; using System.Li ...
- Socket通信简单实例(WCF调用Socket)
服务端: 控制台程序监听 /// <summary> /// Server /// </summary> class Program { static Socket serve ...
- Flex通信-与Java实现Socket通信实例
Flex通信-与Java实现Socket通信实例 转自:http://blessht.iteye.com/blog/1136888 博客分类: Flex 环境准备 [服务器端] JDK1.6,“ja ...
- java的socket通信
本文讲解如何用java实现网络通信,是一个非常简单的例子,我比较喜欢能够立马看到结果,所以先上代码再讲解具体细节. 服务端: import java.io.BufferedReader; import ...
- JAVA RMI远程方法调用简单实例[转]
RMI的概念 RMI(Remote Method Invocation)远程方法调用是一种计算机之间利用远程对象互相调用实现双方通讯的一种通讯机制.使用这种机制,某一台计算机上的对象可以调用另外 一台 ...
- JAVA RMI远程方法调用简单实例(转载)
来源:http://www.cnblogs.com/leslies2/archive/2011/05/20/2051844.html RMI的概念 RMI(Remote Method Invocati ...
- Java:Socket通信
Socket通常也称作"套接字".用于描写叙述IP地址和port,是一个通信链的句柄.应用程序通常通过"套接字"向网络发出请求或者应答网络请求. ServerS ...
- Java的Socket通信----通过 Socket 实现 TCP 编程之多线程demo(2)
JAVA Socket简介 所谓socket 通常也称作”套接字“,用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过”套接字”向网络发出请求或者应答网络请求. import java.io ...
- C++服务器与java进行socket通信案例
分类: [java]2012-10-08 12:03 14539人阅读 评论(46) 收藏 举报 注:本代码版权所有!!!转载时请声明源地址:http://blog.csdn.net/nuptboyz ...
随机推荐
- kali 命令
1.添加用户 如下命令是用root执行的 adduser dong 会直接在/home 目录创建 dong 目录 2.将用户划分到某个组 gpasswd -a user group 3.ifconfi ...
- 日志篇 随着win10更新...
随着win10更新到最新..我发现电脑出了点状况.. 一 是电脑睡眠主机不关闭...然后用了 https://jingyan.baidu.com/article/cb5d6105d76343005c2 ...
- @Import导入自定义选择器
@Import导入自定义选择器 之前一篇博文:Spring中的@Import注解已经详细介绍了@Import注解,不赘述. 需求描述 通过@import注解自定义组件选择器,将满足我们自定义的规则的b ...
- Linux内核宏DEVICE_ATTR使用
1.前言 在Linux驱动程序编写中,使用DEVICE_ATTR宏,可以定义一个struct device_attribute设备属性,并使用sysfs的API函数,便可以在设备目录下创建出属性文件, ...
- 第十四节:Asp.Net Core 中的跨域解决方案(Cors、jsonp改造、chrome配置)
一. 整体说明 1. 说在前面的话 早在前面的章节中,就详细介绍了.Net FrameWork版本下MVC和WebApi的跨域解决方案,详见:https://www.cnblogs.com/yaope ...
- Kafka session.timeout.ms heartbeat.interval.ms参数的区别以及对数据存储的一些思考
Kafka session.timeout.ms heartbeat.interval.ms参数的区别以及对数据存储的一些思考 在计算机世界中经常需要与数据打交道,这也是我们戏称CURD工程师的原因之 ...
- Maven:repositories、distributionManagement、pluginRepositories中repository的区别
本文链接:https://blog.csdn.net/netyeaxi/article/details/95804076 目录 一.repositories中的repository 二.distrib ...
- 二十三、并发编程之深入解析Condition源码
二十三.并发编程之深入解析Condition源码 一.Condition简介 1.Object的wait和notify/notifyAll方法与Condition区别 任何一个java对象都继承于 ...
- .net list转树状结构
主要的方法 /// <summary> /// 转化成树结构 /// </summary> /// <param name="menuList"> ...
- 接口例_龟车赛跑_Java
此例演示java中接口的一般用法. 屋子里有一群程序员,每个人在写着自己的类,共同构建一个世界. 项目经理突然出现:“打扰大家一下,公司决定举办一个竞速比赛,你们写的类都可以参加.为了比赛的顺利进行, ...