您的位置:首页 > 其它

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
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息