知识大全 Java Socket 编程——多线程网络聊天程序
Posted 客户
篇首语:为了生活中努力发挥自己的作用,热爱人生吧。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java Socket 编程——多线程网络聊天程序相关的知识,希望对你有一定的参考价值。
Java Socket 编程——多线程网络聊天程序 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
用java进行网络编程确实很方便 很容易上手 这几天用java进行socket编程 收获不少
首先 进行服务端的编程 作为服务端 编程主要按下面几个步骤进行
// 创建socket ServerSocket ss = new ServerSocket(PortNumber); Socket s = ss accept(); //监听器 产生阻塞 直到有连接才停止阻塞
// 打开输入流 输出流 OutputStream os = s getOutputStream(); BufferedOutputStream bos = new BufferedOutputStream(os); InputStream is = s getInputStream();
// 根据一定的协议读写数据 // 服务器 > 客户 //os write( Hello I am Server! getBytes()); bos write( Hello I am Server! getBytes()); bos flush(); //注意!!
// 服务器 < 客户 byte[] buf = new byte[ ]; int len = is read(buf); System out println(new String(buf len));
// 关系流和Socket //os close(); bos close(); is close(); s close(); ss close();
作为客户端则分为下面几个步骤 其实和服务端差不多 只是少了用ServerSocket进行监听
// 创建socket Socket s = new Socket(InetAddress getByName( localhost ) PortNumber); // 打开输入流 输出流 OutputStream os = s getOutputStream(); InputStream is = s getInputStream();
// 根据一定的协议读写数据 // 服务器 > 客户 byte[] buf = new byte[ ]; int len = is read(buf); System out println(new String(buf len)); // 服务器 < 客户 os write( Hello I am Client! getBytes());
// 关系流和Socket os close(); is close(); s close();
上面这些只是一个单线程的服务端 >客户端的程序 只能进行一次通讯 多次通讯将被告知无法连接
这时 我们就需要用到进程Thread进行编程 将其改造成多线程聊天程序 可以同时进行多客户端的连接与发送信息
代码如下
//Server java
import java awt *; import *; import java io *;
public class Server extends Thread ServerSocket skt;
Socket Client[]=new Socket[ ];; Socket Client =null;
int i = ;
TextArea in;
int port k= l= ;
//BufferedReader theInputStream;
PrintStream theOutputStream;
//String readin;
Face chat;
public Server(int port Face chat) try this port = port; skt = new ServerSocket(port); this chat = chat; catch (IOException e) chat ta append(e toString());
public void run()
chat ta append( 等待连线 );
while (true) //System out print( +i+ \\n ); try
Client[k] = skt accept(); /* 接收客户连接 */
//当有客户端连接时就新建一个子线程
if (i < ) ServerThread server[] = new ServerThread[ ]; server[k]= new ServerThread(Client[k] this chat i); l=server length; server[k] start(); chat ta append( 客户端 + Client[k] getInetAddress() + 已连线\\n ); /*theInputStream = new BufferedReader(new InputStreamReader(Client getInputStream()));*/ //for(int j= ;j<server length;j++) theOutputStream = new PrintStream(server[k] getClient() getOutputStream()); i = server[k] getI(); k++; else //theOutputStream = new PrintStream(null);
catch (SocketException e) //chat ta append( 连线中断!\\n );
//chat clientBtn setEnabled(true); //chat serverBtn setEnabled(true); //chat tfaddress setEnabled(true); //chat tfport setEnabled(true); //try
//skt close(); //Client close(); // catch (IOException err) // chat ta append(err toString()); // catch (IOException e) chat ta append(e toString());
public void dataout(String data) //for(int j= ;j<l;j++) theOutputStream println(data);
class ServerThread extends Thread ServerSocket skt;
Socket Client;
TextArea in;
int port;
int i;
BufferedReader theInputStream;
PrintStream theOutputStream;
String readin;
Face chat;
//服务端子线程public ServerThread(Socket s Face chat int i) this i = ++i; Client = s; //this port = port; //skt = new ServerSocket(port); this chat = chat;
public int getI() return this i; public Socket getClient() return this Client; public void run()
//chat ta append( 等待连线 );
try //Client = skt accept(); /* 接收客户连接 */
//chat ta append( 客户端 + Client getInetAddress() + 已连线\\n ); theInputStream = new BufferedReader(new InputStreamReader(Client getInputStream())); theOutputStream = new PrintStream(Client getOutputStream());
while (true) readin = theInputStream readLine(); chat ta append(readin + \\n );
catch (SocketException e) chat ta append( 连线中断!\\n );
chat clientBtn setEnabled(true); chat serverBtn setEnabled(true); chat tfaddress setEnabled(true); chat tfport setEnabled(true); try i ; skt close(); Client close(); catch (IOException err) chat ta append(err toString()); catch (IOException e) chat ta append(e toString());
public void dataout(String data) theOutputStream println(data);
//Client java
import *; import java io *; import javax swing Timer; class Client extends Thread Socket skt; InetAddress host; int port;
BufferedReader theInputStream; PrintStream theOutputStream; String readin;
Face chat;
public Client(String ip int p Face chat) try host = InetAddress getByName(ip); port = p; this chat = chat; catch (IOException e) chat ta append(e toString());
public void run() try chat ta append( 尝试连线 );
skt = new Socket(host port); chat ta append( 连线成功\\n );
theInputStream = new BufferedReader(new InputStreamReader(skt getInputStream()));
theOutputStream = new PrintStream(skt getOutputStream()); //Timer myTimer = new Timer(); while (true) readin = theInputStream readLine(); chat ta append(readin + \\n ); catch (SocketException e) chat ta append( 连线中断!\\n ); chat clientBtn setEnabled(true); chat serverBtn setEnabled(true); chat tfaddress setEnabled(true); chat tfport setEnabled(true); try skt close(); catch (IOException err) chat ta append(err toString()); catch (IOException e) chat ta append(e toString());
public void dataout(String data) theOutputStream println(data);
//软件界面 进行按键监听调用
//face java
import java awt *; import java awt event *;
public class Face extends Frame /** * */ private static final long serialVersionUID = L; Button clientBtn serverBtn; TextArea ta; TextField tfaddress tfport tftype; int port; Client client; Server server; boolean iamserver; static Face frm;
public Face() clientBtn = new Button( 客户端 ); serverBtn = new Button( 服务器 ); ta = new TextArea( TextArea SCROLLBARS_BOTH); tfaddress = new TextField( ); tfport = new TextField( ); tftype = new TextField( );
tftype addKeyListener(new TFListener()); ta setEditable(false);
setLayout(new FlowLayout()); add(tfaddress); add(tfport); add(clientBtn); add(serverBtn); add(ta); add(tftype); setSize( ); setTitle( 我的聊天室 ); this setVisible(true);
clientBtn addActionListener(new ActionListener() public void actionPerformed(ActionEvent e)
port = Integer parseInt(tfport getText());
client = new Client(tfaddress getText() port frm);
client start();
tfaddress setEnabled(false); tfport setEnabled(false); serverBtn setEnabled(false); clientBtn setEnabled(false); );
serverBtn addActionListener(new ActionListener() public void actionPerformed(ActionEvent e)
port = Integer parseInt(tfport getText());
server = new Server(port frm);
server start();
iamserver = true; tfaddress setText( 成为服务器 );
tfaddress setEnabled(false); tfport setEnabled(false); serverBtn setEnabled(false); clientBtn setEnabled(false); );
addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System exit( ); );
public static void main(String args[]) frm = new Face();
private class TFListener implements KeyListener public void keyPressed(KeyEvent e)
if (e getKeyCode() == KeyEvent VK_ENTER)
ta append( > + tftype getText() + \\n );
if (iamserver) server dataout(tftype getText()); else client dataout(tftype getText());
tftype setText( );
public void keyTyped(KeyEvent e)
public void keyReleased(KeyEvent e)
cha138/Article/program/Java/hx/201311/26868相关参考
知识大全 Java网络编程-Java Socket编程(一)
Java网络编程-JavaSocket编程(一) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
知识大全 Java网络编程-Java Socket编程(二)
Java网络编程-JavaSocket编程(二) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
知识大全 Java网络编程-Java Socket编程(四)
Java网络编程-JavaSocket编程(四) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
知识大全 Java网络编程-Java Socket编程(三)
Java网络编程-JavaSocket编程(三) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!li
利用Socket进行Java网络编程(三) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 作者郗
利用Socket进行Java网络编程(二) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 作者郗
利用Socket进行Java网络编程(一) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 作者郗
基于Socket的Java网络编程集粹 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!其实简单的分析
知识大全 Java网络编程基础(二) Socket类的使用方法
Java网络编程基础(二)Socket类的使用方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Java多线程Socket操作猜数游戏样例 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 服务器