socket模拟聊天程序(1)-单客户端
2016-10-27 10:44
357 查看
概述
根据TCP/IP协议,通过socket实现网络聊天,分为服务器端和客户端,本文主要提供了但客户端的模拟程序。下图展示了socket的通信模型:
上图展示了socket的通讯步骤:
创建ServerSocket和Socket
打开连接到Socket的输入/输出流
按照协议对Socket进行读/写操作
关闭输入输出流、关闭Socket
具体实现
1、服务端实现步骤:
① 创建ServerSocket对象,绑定监听端口
② 通过accept()方法监听客户端请求
③ 连接建立后,通过输入流读取客户端发送的请求信息
④ 通过输出流向客户端发送响应信息
⑤ 关闭相关资源
package com.concurrent.socket; 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; /** * 简单聊天工具的server端。 * * */ public class Server { public static void main(String args[]) throws IOException { String reces = null; int len; Socket socket = null; OutputStream outputstream = null; InputStream inputstream = null; byte[] rece = new byte[1000]; try { // 1、创建一个服务端socket,即ServerSocket,指定绑定的端口,并监听此端口 ServerSocket serversocket = new ServerSocket(8888); // 服务器的套接字,端口为8888,端口一般为1024-65535 while (true) { // 2、调用accept()方法开始监听,等待客户端的连接 socket = serversocket.accept(); // 3、获取输入流,读取客户端的信息 inputstream = socket.getInputStream();// 得到输入流 len = inputstream.read(rece);// 接受客户端消息 if (len != 0) reces = new String(rece, 0, len); System.out.println("我是服务器,客户端说:" + reces); // 回复客户端 BufferedReader bufferreader = new BufferedReader(new InputStreamReader(System.in)); // 获取输出流,响应客户端的请求 outputstream = socket.getOutputStream();// 得到输出流 outputstream.write(("我说:" + bufferreader.readLine()).getBytes());// 返回给客户端的欢迎信息 } } catch (Exception e) { e.printStackTrace(); } finally { inputstream.close(); outputstream.close(); socket.close();// 记住一定要关闭这些输入,输出流和套接字 } } }
2、服务端
客户端的创建步骤如下:
① 创建Socket对象,指明需要连接的服务器的地址和端口号
② 连接建立后,通过输出流向服务器端发送请求信息
③ 通过输入流获取服务器响应的信息
④ 关闭响应资源
public class Client { public static void main(String[] args) throws IOException { String ServerIpAddress = "127.0.0.1";// 对方的IP String words = "Hello";// 对方的话 String temp = null; byte[] serverSay = new byte[1000];// 读取<1KB InputStreamReader read = null; int len = 0; Socket s = null; OutputStream outputstream = null; InputStream inputstream = null; // 取得你给他的IP System.out.println("请输入对方的IP(默认发给自己):"); read = new InputStreamReader(System.in); try { temp = new BufferedReader(read).readLine(); if (!temp.equals("")) ServerIpAddress = temp; } catch (IOException e1) { } // 取得你各他的Message System.out.println("请输入想对他(她)说的话----输入QUIT 退出!!:"); read = new InputStreamReader(System.in); while (true) { try { temp = "Hello"; temp = new BufferedReader(read).readLine(); words = temp; if (words.equals("quit")) break; temp = "客户端....." + words; // 发起通信 4000 s = new Socket(InetAddress.getByName(ServerIpAddress), 8888);// 套接字的IP地址和端口号 outputstream = s.getOutputStream(); inputstream = s.getInputStream(); outputstream.write(temp.getBytes("gbk"));// 向服务器发送消息 len = inputstream.read(serverSay);// 接受服务器消息 System.out.println( new String(serverSay, 0, len));// 客户端控制台显示服务器返回的信息 } catch (Exception e) { } finally { inputstream.close(); outputstream.close(); s.close();// 记住一定要关闭这些输入,输出流和套接字 } }// end while } }
相关文章推荐
- 仿QQ聊天程序SOCKET编程服务端与客户端,成功通信
- 基于socket、多线程的客户端服务器端聊天程序
- 简单的Socket聊天程序(客户端)
- C# Socket聊天程序(一个服务端,多个客户端)
- C++基于socket的单线程服务器客户端聊天程序(TCP)
- C# SOCKET编写的简单聊天通信程序(客户端+服务端)
- 详解基于java的Socket聊天程序――客户端(附demo)
- Socket编程之聊天程序 - 模拟Fins/ModBus协议通信过程
- 基于socket的Linux网络聊天程序--单线程非阻塞客户端
- 基于socket、多线程的客户端服务器端聊天程序
- C# Socket聊天程序(一个服务端,多个客户端)
- Java 基于多客户端的ServerSocket—聊天服务器端,客户端Socket “操作文件”系统的程序拼接
- Java socket模拟聊天程序
- Socket编程之聊天程序 - 模拟Fins/ModBus协议通信过程
- C# Socket聊天程序(一个服务端,多个客户端)
- 模拟QQ聊天程序_客户端_网络编程
- 详解基于java的Socket聊天程序——客户端(附demo)
- c# WINFORM SOCKET编程-简单聊天程序(客户端)
- C#下如何实现服务器+客户端的聊天程序
- JTextPane的例子,模拟聊天客户端,演示了为每段文字设置字体、字号、样式、颜色、背景色和插入图片功能