简单聊天客户端

import java.io.*;
import java.net.*;
import java.util.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class SimpleChatClient
{
	JTextArea incoming;
	JTextField outgoing;
	BufferedReader reader;
	PrintWriter writer;
	Socket sock;
	public static void main(String [] args)
	{
		SimpleChatClient client=new SimpleChatClient();
		client.go();
	}
	public void go()
	{
		JFrame frame=new JFrame("Ludicrously Simple Chat Client");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		JPanel mainPanel=new JPanel();
		incoming=new JTextArea(15,50);
		incoming.setLineWrap(true);
		incoming.setWrapStyleWord(true);
		incoming.setEditable(false);
		JScrollPane qScroller=new JScrollPane(incoming);
		qScroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
		qScroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
		JButton sendButton=new JButton("Send");
		sendButton.addActionListener(new SendButtonListener());
		mainPanel.add(qScroller);
		outgoing=new JTextField(20);
		mainPanel.add(outgoing);
		mainPanel.add(sendButton);
		setUpNetWorking();
		//启动新的线程,以内部类作为任务,此任务是读取服务器的socket串流显示在文本区域
		Thread readerThread=new Thread(new IncomingReader());
		readerThread.start();
		frame.getContentPane().add(BorderLayout.CENTER,mainPanel);
		frame.setSize(650,600);
		frame.setVisible(true);
	}
	private void setUpNetWorking()
	{
		try{
			sock=new Socket("127.0.0.1",5000);
			InputStreamReader streamReader=new InputStreamReader(sock.getInputStream());
			reader=new BufferedReader(streamReader);
			writer=new PrintWriter(sock.getOutputStream());
			System.out.println("netWorking established");
		}catch(IOException ex){ex.printStackTrace();}
	}	
	public class SendButtonListener implements ActionListener
	{
		public void actionPerformed(ActionEvent ev)
		{
			try{
				writer.println(outgoing.getText());
				writer.flush();
			}catch(Exception ex){ex.printStackTrace();}
			outgoing.setText("");
			outgoing.requestFocus();
		}
	}
	public class IncomingReader implements Runnable{
		public void run()
		{
			String message;
			try{
				while((message=reader.readLine())!=null)
				{
					System.out.println("client read "+message);
					incoming.append(message+"\n");
				}
			}catch(Exception ex){ex.printStackTrace();}
		}
	}
}


import java.io.*;
import java.net.*;
import java.util.*;
public class VerySimpleChatServer
{
	ArrayList clientOutputStreams;
	public static void main(String [] args)
	{
		new VerySimpleChatServer().go();
	}
	public class ClientHandler implements Runnable
	{
		BufferedReader reader;
		Socket sock;
		
		public ClientHandler(Socket clientSocket)
		{
			try{
				sock=clientSocket;
				InputStreamReader isReader=new InputStreamReader(sock.getInputStream());
				reader=new BufferedReader(isReader);
			}catch(Exception ex){ex.printStackTrace();}
		}
		public void run()
		{
			String message;
			try{
				while((message=reader.readLine())!=null)
				{
					System.out.println("read "+message);
					tellEveryone(message);
				}
			}catch(Exception ex){ex.printStackTrace();}
		}
		
		
	}
	public void go()
		{
			clientOutputStreams=new ArrayList();
			try{
				ServerSocket serverSock=new ServerSocket(5000);
				while(true)
				{
					Socket clientSocket=serverSock.accept();
					PrintWriter writer=new PrintWriter(clientSocket.getOutputStream());
					clientOutputStreams.add(writer);
					Thread t=new Thread(new ClientHandler(clientSocket));
					t.start();
					System.out.println("got a connection");
				}
			}catch(Exception ex){ex.printStackTrace();}
		}
		public void tellEveryone(String message)
		{
			Iterator it=clientOutputStreams.iterator();
			while(it.hasNext())
			{
				try{
					PrintWriter writer=(PrintWriter)it.next();
					writer.println(message);
					writer.flush();
				}catch(Exception ex){ex.printStackTrace();}
				
			}
		}
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个基于Vue的简单聊天客户系统的实现。由于涉及到后接口和数据库操作,我不能在这里提供完整的代码,但是我可以给你提供一个框架和一些关键部分的实现思路。 首先,你需要安装Vue.js和Vue Router,可以通过以下命令来安装: ``` npm install vue npm install vue-router ``` 然后,你需要定义聊天系统的路由,例如: ```javascript import Vue from 'vue' import Router from 'vue-router' import Login from '@/components/Login' import Chat from '@/components/Chat' Vue.use(Router) export default new Router({ routes: [ { path: '/', name: 'Login', component: Login }, { path: '/chat', name: 'Chat', component: Chat } ] }) ``` 上面的代码定义了两个路由,一个是登录页面,另一个是聊天页面。 接下来,你需要实现登录页面的代码,例如: ```javascript <template> <div> <h1>登录页面</h1> <input type="text" v-model="username" placeholder="用户名"> <input type="password" v-model="password" placeholder="密码"> <button @click="login">登录</button> </div> </template> <script> export default { data () { return { username: '', password: '' } }, methods: { login () { // 调用后接口进行登录验证 // 如果验证通过,则跳转到聊天页面 this.$router.push('/chat') } } } </script> ``` 上面的代码定义了一个登录页面的组件,包括用户名、密码和登录按钮。当用户点击登录按钮时,会调用后接口进行登录验证,如果验证通过,则跳转到聊天页面。 最后,你需要实现聊天页面的代码,例如: ```javascript <template> <div> <h1>聊天页面</h1> <div v-for="message in messages" :key="message.id"> <span>{{ message.username }}:</span> <span>{{ message.content }}</span> </div> <input type="text" v-model="message" placeholder="请输入消息"> <button @click="sendMessage">发送</button> </div> </template> <script> export default { data () { return { messages: [], message: '' } }, methods: { sendMessage () { // 调用后接口发送消息 // 发送成功后,将消息添加到消息列表中 this.messages.push({ id: Date.now(), username: '我', content: this.message }) this.message = '' } } } </script> ``` 上面的代码定义了一个聊天页面的组件,包括消息列表、输入框和发送按钮。当用户点击发送按钮时,会调用后接口发送消息,如果发送成功,则将消息添加到消息列表中。 当然,以上代码只是一个简单的框架,实际的聊天系统需要更加完善和复杂的实现。同时,需要注意安全性和性能等问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值