您当前的位置:首页 > 互联网教程

怎样有java socket实现发送接受表情类似QQ详细点代码

发布时间:2025-05-20 05:35:27    发布人:远客网络

怎样有java socket实现发送接受表情类似QQ详细点代码

一、怎样有java socket实现发送接受表情类似QQ详细点代码

哈我正好在做一个类似qq的系统,不过还没完工,不过可以运行,现在只实现了登录,显示分组,列出好友,查看好友信息功册,看看代码吧

哎类太多了,像什么vo类及实现类我就不发了,再说这些类没什么技术含量

如果有必要的话你留下邮箱,我将两个工程和数据库代码发给你

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

*服务器类,用于接受来自客户端的请求,本系统规定来自客户端每一次请求所传过来的参数不少于两个,第一个用来标识此次请求将做什么操作,后面

*的参数为客户端请求服务所需的必要参数

public class ChatServer extends Thread{

private static final int MAXLINK= 50;

private static ServerSocket ss;

public static void main(String[] args) throws Exception{

//启用多线程:其实就是调用run方法,好像没必要另启线程,哎写好了就不改了

System.out.println("服务器已成功启动…………");

System.out.println("服务器出现莫名故障,服务器退出!");

*操作类,用来处理来自客户端的请求

//接定义用于实别客户端发来的头号请求将做何操作的变量

*以下几行用于声明网络操作的必要变量

private InputStream ips= null;

private OutputStream ops= null;

private ObjectOutputStream soops= null;

private ObjectInputStream soips= null;

*构造函数,在其中为以上定义的变量的赋值

soips= new ObjectInputStream(ips);

//接收从客户端发来的头号请求,它用于实别此次请求的内容

operate= soips.readObject().toString();

UserDao userdao= new UserImpl();

user=(Userinfo) soips.readObject();

soops= new ObjectOutputStream(ops);

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import javax.swing.JOptionPane;

import javax.swing.JTextField;

public class Login extends JFrame{

private final int TEXTSIZE= 10;//定义文本长度的值

private JLabel lname= new JLabel("用户名");

private JLabel lpassword= new JLabel("密码");

private JLabel lhead= new JLabel("用户登录");

private JButton bok= new JButton("登录");

private JButton bcancel= new JButton("退出");

private JPanel pcenter= new JPanel();

private JPanel pname= new JPanel();

private JPanel ppwd= new JPanel();

private JPanel psouth= new JPanel();

private JPanel pnorth= new JPanel();

private TextField pwd= new TextField(TEXTSIZE);

private JTextField name= new JTextField(TEXTSIZE);

private GridLayout glayout= new GridLayout();

this.setBounds(300, 200, 320, 250);

this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);

public static void main(String[] args){

// TODO Auto-generated method stub

private final void frameLayout(){

lhead.setFont(new Font("", Font.BOLD, 28));

private final void addAction(){

bok.addActionListener(new AddAction());

bcancel.addActionListener(new AddAction());

name.addActionListener(new AddAction());

pwd.addActionListener(new AddAction());

private class AddAction implements ActionListener{

public void actionPerformed(ActionEvent e){

if("".equals(name.getText())||"".equals(pwd.getText())){

JOptionPane.showMessageDialog(Login.this,"用户名和密码不能为空");

Integer.parseInt(name.getText());

JOptionPane.showMessageDialog(Login.this,"请正确输入号码");

new TcpLogin(name.getText(), pwd.getText()).check();

*登录验证类,内置类将用户名和密码传到服务器做验证

*构造函数,初始化用户名和密码的值

TcpLogin(String name, String pwd){

this.name= Integer.parseInt(name);

Window waitWin=new Window(Login.this);

Userinfo user= new Userinfo();

ObjectInputStream coips= null;

ObjectOutputStream coops= null;

soc= new Socket("127.0.0.1", 8001);

coops= new ObjectOutputStream(ops);

ObjectInputStream oips= new ObjectInputStream(ips);

user=(Userinfo) oips.readObject();

JOptionPane.showMessageDialog(login,"用户名和密码错误");

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import javax.swing.JScrollPane;

import javax.swing.JTextField;

import javax.swing.tree.DefaultMutableTreeNode;

*此类为本程序客户端的主界面,刚想了好会儿决定取名叫’嘻哈‘意为’嘻嘻哈哈‘

public class XiHa extends JFrame{

static List<Userinfo> friends= new ArrayList<Userinfo>();

private JPanel ptree= new JPanel();

private JPanel psouth= new JPanel();

private JButton bfind= new JButton("查找");

private JButton bsystem= new JButton("系统设置");

this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);

this.setBounds(800, 100, 200, 500);

ptree.add(new JScrollPane(new CreateTree(user).createNode()));

*本类用于创建以用户信息为节点的树

DefaultMutableTreeNode all= new DefaultMutableTreeNode("所有好友");

Set<Groupinfo> groups= user.getGroupinfos();

Set<Relationinfo> relations= user.getRelationinfosForUserId();

Iterator<Groupinfo> ig= groups.iterator();

Iterator<Relationinfo> ir= null;

DefaultMutableTreeNode friendNode= null;

friendNode= new DefaultMutableTreeNode(group.getGroupName());

if(relation.getResideGroupId()== group.getGroupId()){

friendNode.add(new DefaultMutableTreeNode(friend

+"("+ relation.getFriendId()+")"));

tree.addMouseListener(new TreeListener());

*此类为创建树的内置类,用于对结点的事件处理

class TreeListener extends MouseAdapter{

private JFrame friendInfo=null;

*覆写mouseAdapter中的mouseClicked方法,鼠标点击时触发

public void mouseClicked(MouseEvent e){

DefaultMutableTreeNode treeNode=null;

treeNode=(DefaultMutableTreeNode)CreateTree.this.tree.getLastSelectedPathComponent();

mouseTimer= new javax.swing.Timer(350, new ActionListener(){

public void actionPerformed(ActionEvent evt){

if(e.getClickCount()==2&&mouseTimer.isRunning()){

private void initFriendInfo(){

friendInfo.setDefaultCloseOperation(friendInfo.DISPOSE_ON_CLOSE);

friendInfo.setLocationRelativeTo(null);

friendInfoContent(this.treat());

private void friendInfoContent(int friendId){

Userinfo friend=this.findFriend(friendId);

pmain.setLayout(new GridLayout(3,1));

panel1.add(new JLabel("嘻哈号:"+friend.getUserId()+""+"昵称:"+friend.getPetname()));

panel2.add(new JLabel("姓名:"+(friend.getName()==null?"":friend.getName())+""+"年龄:"+friend.getAge()+""+"性别:"+friend.getSex()));

panel3.add(new JLabel("个性签名:"+(friend.getAutograph()==null?"":friend.getAutograph())));

pmain.add(panel1);pmain.add(panel2);pmain.add(panel3);

*此方法用于获得好友的id号从节点上的文本中获取

int len=nodeInfo.getBytes().length;

int friendId=Integer.parseInt(new String(nodeInfo.getBytes(),len-5,4));

private Userinfo findFriend(int friendId){

Iterator friends=XiHa.friends.iterator();

Userinfo ifriend=(Userinfo)friends.next();

if(ifriend.getUserId()==friendId){

*本类聊天窗口类,还不知道该怎么写,现在有点茫然,刚跟网友交流了一下

*觉得前面写的通信代码很不规范,应该重新写,哎先把界面写好再说

*一会儿就要回去过年了,可能就没那么时间写这个系统了

private JPanel pmain=new JPanel();

private JPanel pcether=new JPanel();

private JPanel psouth=new JPanel();

//private JTextArea precod=new JTextArea(JTextArea.);

二、浅谈Java中如何利用socket进行网络编程(一)

Socket是网络上运行的两个程序间双向通讯的一端,它既可以接受请求,也可以发送请求,利用它可以较为方便的编写网络上的数据的传递。在java中,有专门的socket类来处理用户的请求和响应。利用SOCKET类的方法,就可以实现两台计算机之间的通讯。这里就介绍一下在JAVA中如何利用socket进行网络编程。在Java中Socket可以理解为客户端或者服务器端的一个特殊的对象,这个对象有两个关键的方法,一个是getInputStream方法,另一个是getOutputStream方法。getInputStream方法可以得到一个输入流,客户端的Socket对象上的getInputStream方法得到的输入流其实就是从服务器端发回的数据流。GetOutputStream方法得到一个输出流,客户端Socket对象上的getOutputStream方法返回的输出流就是将要发送到服务器端的数据流,(其实是一个缓冲区,暂时存储将要发送过去的数据)。程序可以对这些数据流根据需要进行进一步的封装。本文的例子就对这些数据流进行了一定的封装(关于封装可以参考Java中流的实现部分)。一、建立服务器类 Java中有一个专门用来建立Socket服务器的类,名叫ServerSocket,可以用服务器需要使用的端口号作为参数来创建服务器对象。ServerSocket server= new ServerSocket(9998)这条语句创建了一个服务器对象,这个服务器使用9998号端口。当一个客户端程序建立一个Socket连接,所连接的端口号为9998时,服务器对象server便响应这个连接,并且server.accept()方法会创建一个Socket对象。服务器端便可以利用这个Socket对象与客户进行通讯。Socket incoming= server.accept()进而得到输入流和输出流,并进行封装BufferedReader in= new BufferedReader(new InputStreamReader(incoming.getInputStream())); PrintWriter out= new PrintWriter(incoming.getOutputStream(),true);随后,就可以使用in.readLine()方法得到客户端的输入,也可以使用out.println()方法向客户端发送数据。从而可以根据程序的需要对客户端的不同请求进行回应。

三、java中如何创建socket连接的过程

1、在打开的ie浏览器窗口右上方点击齿轮图标,选择“Internet选项”,如下图所示:

2、在打开的Internet选项窗口中,切换到安全栏,在安全选卡中点击“自定义级别”,如下图所示:

3、在“安全设置-Internet区域”界面找到“Java小程序脚本”、“活动脚本”,并将这两个选项都选择为“禁用”,然后点击确定,如下图所示: