java程序---聊天程序

Python012

java程序---聊天程序,第1张

客户端:package com.toolimport java.io.BufferedReader

import java.io.IOException

import java.io.InputStreamReader

import java.io.PrintWriter

import java.net.InetAddress

import java.net.Socket

import java.net.UnknownHostException/**

* 网络编程 聊天程序 文件传送程序

*

* @author zb

*

*/

public class SocketTalkingClient { public static void main(String[] args) {

SocketTalkingClient st = new SocketTalkingClient()

try

{

st.createClient()

}catch(Exception e)

{

e.printStackTrace()

}

} int port = 1129

public void createClient() throws UnknownHostException, IOException {

Socket server = new Socket(InetAddress.getLocalHost(), port)

BufferedReader in = new BufferedReader(new InputStreamReader(server

.getInputStream()))

PrintWriter out = new PrintWriter(server.getOutputStream()) BufferedReader wt = new BufferedReader(new InputStreamReader(System.in)) while (true) {

String line = wt.readLine()

out.println(line)

out.flush() String receiveWord = in.readLine() System.out.println("Client: receive -->" + receiveWord)

if (receiveWord.equals("exit")) {

break

}

} server.close()}}

服务端:package com.toolimport java.io.BufferedReader

import java.io.IOException

import java.io.InputStreamReader

import java.io.PrintWriter

import java.net.ServerSocket

import java.net.Socket/**

* 网络编程 聊天程序 文件传送程序

*

* @author zb

*

*/

public class SocketTalking { public static void main(String[] args) {

SocketTalking st = new SocketTalking()

try

{

st.createServer()

}catch(Exception e)

{

e.printStackTrace()

}

} int port = 1129public void createServer() throws IOException {

// 建立一个固定位置的服务方

// 这里稍微要注意的是端口的分配必须是唯一的.因为端口是为了唯一标识每台计算机唯一服务的.

// 另外端口号是从0~65535之间的,前1024个端口已经被Tcp/Ip

// 作为保留端口,因此你所分配的端口只能是1024个之后的

ServerSocket server = new ServerSocket(port) //每一个客户端启动一个线程处理

while (true) {

MultiClient client = new MultiClient(server.accept())

client.start()

} } /**

* 服务端的多线程运行 接收多个客户端

*

* @author Administrator

*

*/

class MultiClient extends Thread { private Socket socket public MultiClient(Socket s) {

socket = s

} public void run() { try {

// 读取socket

BufferedReader in = new BufferedReader(new InputStreamReader(

socket.getInputStream())) // 写入socket

PrintWriter out = new PrintWriter(socket.getOutputStream()) while(true)

{

String str = in.readLine()System.out.println("Server: receive -->" + str)//服务端向客户端发送报文

out.println(str)out.flush()if (str.equals("exit")) {

break

}

}

socket.close()

} catch (Exception e) {

e.printStackTrace()

} finally {

System.out.println("this Thread is over")

//如果保存服务端不关闭 一直运行 可以注释掉改方法 以适用多个线程 多个客户端的情况

System.exit(0)

} }

}}

聊天具体是这么聊,聊天室、群聊、一对一。java其实websocket足矣,ws服务器部署起来,客户端程序连接ws服务器服务,用服务器转发作为消息传输机制,当然你要大文件传输和视频通话就用socket转发连接,p2p通信,这里的p2pjava因为都是服务器部署,不需要做外网打洞穿透,因为web服务器他是本地环境,明白不。你用windows应用程序就需要外网穿透打洞,你不可能视频数据也让服务器转发吧,聊天人数越来越多,服务器承受不了,它需要服务器指派点对点单向传输,不去途径服务器。