基于JAVA网络编程的聊天小程序
package com.neusoft.edu.socket;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 服务器端代码
* 获取客户端发送的信息,显示并且返回对应的回复
* 1、创建ServerSocket对象
* 2、调用accept方法获取客户端连接
* 3、使用输入流读取客户端发送的数据
* 4、使用输出流向客户端写入数据
* 5、关闭对应的对象
* @author L
*
*/
public class ChatServer {
/**
* @param args
*/
public static void main(String[] args) {
try {
//1、创建ServerSocket对象,8875为自定义端口号
ServerSocket server = new ServerSocket(8857); //简单提示
System.out.println("等待客户端连接……"); //2、获取客户端连接
Socket client = server.accept(); //获取客户端的相关信息
System.out.println(client.getInetAddress().getHostAddress() + "连接上来了……"); //3.1、定义输入流和输出流对象
BufferedReader in = new BufferedReader(
new InputStreamReader(
client.getInputStream())); //用来获取从控制台输入的数据,将该数据发送给客户端
BufferedReader inByServer = new BufferedReader(
new InputStreamReader(System.in)); PrintWriter out = new PrintWriter(client.getOutputStream(), true); //读取到的数据
String data = null;
String answer = null; //循环和客户端进行通信
do
{
//3.2、读取客户端发送的数据
data = in.readLine(); //在服务器端显示读取到的数据
System.out.println("客户端发送信息:" + data); //获取服务器端要发送给客户端的信息
System.out.print("服务器端回复客户端:");
answer = inByServer.readLine(); //3.3、将数据写入到客户端
out.println(answer);
out.flush();
}while(!"bye".equals(data)); //4、关闭相关资源
out.flush();
in.close();
inByServer.close();
out.close(); //关闭Socket对象
client.close();
server.close(); System.out.println("服务器端关闭……");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
package com.neusoft.edu.socket; import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException; /**
* 聊天客户端
* 1、创建Socket对象
* 2、写入数据
* 3、读取从服务器端发来的数据
* 4、关闭
* @author L
*
*/
public class ChatClient { /**
* @param args
*/
public static void main(String[] args) {
try {
//1、创建Socket对象,("192.168.1.107", 8857)分别为主机IP和端口号,两个类端口号要一致
Socket client = new Socket("192.168.1.107", 8857); //2.1、创建输入流和输出流对象
BufferedReader in = new BufferedReader(
new InputStreamReader(
client.getInputStream())); PrintWriter out = new PrintWriter(client.getOutputStream(), true); BufferedReader inByClient = new BufferedReader(
new InputStreamReader(System.in)); //服务器端发送的数据
String data = null;
//客户端向服务器端写入的数据
String answer = null; do
{
//2.2、客户端的读写操作
System.out.print("你说:");
//获取要发送给服务器端的数据
answer = inByClient.readLine();
//向服务器端写入数据
out.println(answer);
out.flush(); //获取服务器端发送的数据
data = in.readLine();
//输出从服务器端获取的数据
System.out.println("服务器端返回信息是:" + data);
}while(!"bye".equals(data)); //3、关闭
in.close();
out.close();
inByClient.close();
client.close(); System.out.println("客户端关闭……");
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} }
这是个小程序,不过也包含了一些小BUG,仅供新手参考,不妥之处,还望见谅!
基于JAVA网络编程的聊天小程序的更多相关文章
- JAVA 网络编程 - 实现 群聊 程序
在实现 这个 程序之前, 我们 需要 了解 一些 关于 Java 网络 编程 的 知识. 基本 的 网络知识: 网络模型 OSI (Open System Interconnection 开放系统互连 ...
- Java网络编程案例---聊天室
网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来. java.net包中JavaSE的API包含有类和接口,它们提供低层次的通信细节.你可以直接使用这些类和接口,来专注于解决 ...
- Java网络编程——UDP聊天程序
UDP简介 UDP协议的全称是用户数据报,在网络中它与TCP协议一样用于处理数据报.在OSI模型中,UDP位于第四层--传输层,处于IP协议额上一层.UDP有不提供数据报分组.组装以及不能对数据报排序 ...
- Java网络编程--简单聊天程序
背景 毕业设计前的练手,学校小比赛中的一个题目. 开发环境 Java(eclipse)+Mysql 简介 使用Java+Mysql开发以个简单的聊天工具,在本次项目中实现了: 1. 用户登录(客户端至 ...
- 这份书单会告诉你,Java网络编程其实很重要
- Netty 聊天小程序
这节讲解基于 Netty 快速实现一个聊天小程序. 一.服务端 1. SimpleChatServerHandler(处理器类) 该类主要实现了接收来自客户端的消息并转发给其他客户端. /** * 服 ...
- Java网络编程和NIO详解9:基于NIO的网络编程框架Netty
Java网络编程和NIO详解9:基于NIO的网络编程框架Netty 转自https://sylvanassun.github.io/2017/11/30/2017-11-30-netty_introd ...
- Netty学习——基于netty实现简单的客户端聊天小程序
Netty学习——基于netty实现简单的客户端聊天小程序 效果图,聊天程序展示 (TCP编程实现) 后端代码: package com.dawa.netty.chatexample; import ...
- 用java网络编程中的TCP方式上传文本文件及出现的小问题
自己今天刚学java网络编程中的TCP传输,要用TCP传输文件时,自己也是遇到了一些问题,抽空把它整理了一下,供自己以后参考使用. 首先在这个程序中,我用一个客户端,一个服务端,从客户端上传一个文本文 ...
随机推荐
- dispatch_semaphore
dispatch_semaphore 信号量基于计数器的一种多线程同步机制.在多个线程访问共有资源时候,会因为多线程的特性而引发数据出错的问题. dispatch_queue_t queue = di ...
- Servlet 中使用POI生成Excel
使用的是poi3.13 http://mvnrepository.com/artifact/org.apache.poi/poi/3.13 import java.io.IOException; im ...
- rm加转义很危险
rm -r 想转义一个空格字符,转得不对 -r, -R, --recursive 递归删除目录及其内容 连续rm了n个不想rm的文件夹.%>_<% 想起来以前有人也因为rm的失误把整个wo ...
- insert时出现主键冲突的处理方法【转载】
原文出处:http://hi.baidu.com/ytjwt/blog/item/1ccc2c26022b0608908f9d8c.html 使用"insert into"语句进行 ...
- UIKit的手风琴菜单,单条展开和多条同时展开
这个也要进来看看哈. 记得加多个属性时的用法就可以了. 因为官网提供太多的SAPMLE啦.. http://www.getuikit.net/docs/accordion.html <div c ...
- 【UVA10829】 L-Gap Substrings (后缀数组)
Description If a string is in the form UVU, where U is not empty, and V has exactly L characters, we ...
- 修改EditText的光标位置
Android 的 EditText 控件默认获取焦点的时候, 插入光标是在第一个位置的,如果EditText中设置了文本, 这个时候光标是在文本的最前面, 而不是文本的最后. 为了方便用户使用, 需 ...
- ☀【SeaJS】SeaJS Grunt构建
如何使用Grunt构建一个中型项目?https://github.com/twinstony/seajs-grunt-build spmjshttp://docs.spmjs.org/doc/inde ...
- Eclipse下安装及配置maven项目管理工具
①eclipse下maven插件安装. 本地maven安装.环境变量配置完成后,打开eclipse,点击eclipse菜单栏Help->Eclipse Marketplace搜索关键字maven ...
- Linux 下挂载硬盘的 方法
1. 添加磁盘,查看磁盘状况 [root@db1 /]# fdisk -l Disk /dev/sda: 10.7 GB, 10737418240 bytes 255 heads, 63 sector ...