1. 目标:实现两个用户之间的通信,利用的是简单的Socket知识以及简略界面

2. 界面:分为客户端与服务器端(如下图)

3. 基本功能:客户端先向服务器端发送一个消息,这样就可以让客户端与服务器端实现持续通信

4. 代码实现:

(1)服务器端代码

 package com.test;

 import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket; import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField; public class QQServer extends JFrame implements ActionListener{
JTextArea jta;
JTextField jtf;
JButton jb;
JScrollPane jsp;
JPanel jpn; PrintWriter pw;
/**
* @param args
*/
public static void main(String[] args) {
QQServer qq = new QQServer();
qq.init();
}
public QQServer(){
//页面布局
jta = new JTextArea();
jtf = new JTextField(10);
jb = new JButton("发送");
jb.addActionListener(this);//事件监听
jsp = new JScrollPane(jta);
jpn = new JPanel(); jpn.add(jtf);
jpn.add(jb); this.add(jsp,"Center");
this.add(jpn,"South");
this.setTitle("简易qq服务器端"); this.setSize(300,200);
this.setVisible(true);
}
public void init(){
try {
//服务器监听端口
System.out.println("服务器在监听.....");
ServerSocket ss = new ServerSocket(9992);
Socket s = ss.accept();
//服务器接收流
InputStreamReader isr = new InputStreamReader(s.getInputStream());
BufferedReader br = new BufferedReader(isr);
//服务器输出
pw = new PrintWriter(s.getOutputStream(), true);
while (true) {
//持续接收从客户端信息并显示
String info = br.readLine();
jta.append("客户端对服务器端说:"+info+"\r\n");
}
} catch (Exception e) {
// TODO: handle exception
}
}
@Override
public void actionPerformed(ActionEvent e) {
//在Jtextfield内获取文字,并发送给客户端
if(e.getSource()==jb){
String msg = jtf.getText();
jta.append("服务器对客户端说:"+msg+"\r\n");
pw.println(msg);
jtf.setText("");
} } }

(2)客户端代码

 package com.test;
/**
* 简易qq,服务器端实现
*/
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket; import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField; public class QQClient extends JFrame implements ActionListener{
JTextArea jta;//
JTextField jtf;
JButton jb;
JScrollPane jsp;
JPanel jpn; PrintWriter pw;
public static void main(String[] args) {
QQClient qq = new QQClient();
qq.init();
}
public QQClient(){
//界面布局
jta = new JTextArea();
jtf = new JTextField(10);
jb = new JButton("发送");
jb.addActionListener(this);
jsp = new JScrollPane(jta);
jpn = new JPanel(); jpn.add(jtf);
jpn.add(jb); this.add(jsp,"Center");
this.add(jpn,"South");
this.setTitle("简易qq 客户端"); this.setSize(300,200);
this.setVisible(true); }
public void init(){
try {
//客户端请求服务器
Socket s = new Socket("127.0.0.1",9992);
//客户端接收流
InputStreamReader isr = new InputStreamReader(s.getInputStream());
BufferedReader br = new BufferedReader(isr);
//客户端输出
pw = new PrintWriter(s.getOutputStream(), true);
while (true) {
//持续接收从服务器信息并显示
String info = br.readLine();
jta.append("服务器端对客户端说:"+info+"\r\n");
}
} catch (Exception e) {
// TODO: handle exception
}
}
@Override
public void actionPerformed(ActionEvent e) {
//在Jtextfield内获取文字,并发送给服务器端
if(e.getSource()==jb){
String msg = jtf.getText();
jta.append("客户端对服务器端说:"+msg+"\r\n");
pw.println(msg);
jtf.setText("");
} } }

网络Socket编程(简易qq实现之C/S通信1)的更多相关文章

  1. UDP协议网络Socket编程(java实现C/S通信案例)

    我的博客园:https://www.cnblogs.com/chenzhenhong/p/13825286.html 我的CSDN博客:https://blog.csdn.net/Charzous/a ...

  2. Java:基于TCP协议网络socket编程(实现C/S通信)

    目录 一.前言:TCP原理简介 二.Socket编程通信 三.TCP服务器端(具体代码) 四.TCP客户端(具体代码) 五.通信效果演示 六."创意"机器人:价值一个亿的AI核心代 ...

  3. java多线程实现TCP网络Socket编程(C/S通信)

    目录 开篇必知必会 一.多线程技术 二.实现多线程接收 1.单线程版本 2.多线程版本 三.多线程与进程的关系 四.客户端界面完整代码 五.多线程通信对比 最后 开篇必知必会 在前一篇<Java ...

  4. python之网络socket编程

    一.网络协议 客户端/服务器架构 1.硬件C/S架构(打印机) 2.软件C/S架构(互联网中处处是C/S架构):B/S架构也是C/S架构的一种,B/S是浏览器/服务器 C/S架构与socket的关系: ...

  5. 【java】网络socket编程简单示例

    package 网络编程; import java.io.IOException; import java.io.PrintStream; import java.net.ServerSocket; ...

  6. 网络Socket编程及实例

    1 TCP和UDP介绍 在介绍TCP和UDP之前,有必要先介绍下网络体系结构的各个层次. 1.1  网络体系结构 协议:控制网络中信息的发送和接收.定义了通信实体之间交换报文的格式和次序,以及在报文传 ...

  7. C#网络Socket编程

    1.什么是Socket Sockets 是一种进程通信机制,是一个通信链的句柄(其实就是两个程序通信用的) 2.分类 流式套接字(SOCK_STREAM):提供了一种可靠的.面向连接的双向数据传输服务 ...

  8. Linux下网络socket编程——实现服务器(select)与多个客户端通信

    一.关于socket通信 服务器端工作流程: 调用 socket() 函数创建套接字 用 bind() 函数将创建的套接字与服务端IP地址绑定 调用listen()函数监听socket() 函数创建的 ...

  9. Beej网络socket编程指南

    bind()函数 一旦你有一个套接字,你可能要将套接字和机器上的一定的端口关联 起来.(如果你想用listen()来侦听一定端口的数据,这是必要一步--MUD 告 诉你说用命令 "telne ...

随机推荐

  1. 编译android源码遇到错误及其解决方法

    升级ubuntu的14.04后,android的源码又编译错误了,一下是错误说明赫解决方法: 1.make: *** [out/host/linux-x86/obj/EXECUTABLES/aidl_ ...

  2. [javaSE] IO流(装饰设计模式)

    装饰设计模式:当想要对已有的对象进行功能增强时,可以自定义类将已有的对象传入,并提供加强功能,自定义的该类称为装饰类 典型的: Reader--FileReader --BufferedReader ...

  3. php 函数的嵌套

    /*一定要小心变量作用域*/ function insert_dynamic() { function bar() { echo "I don't exist until insert_dy ...

  4. 4.java设计模式-原型模式(prototype)

    在<JAVA与模式>一书中开头是这样描述原型(Prototype)模式的: 原型模式属于对象的创建模式.通过给出一个原型对象来指明所有创建的对象的类型,然后用复制这个原型对象的办法创建出更 ...

  5. 前端(十一):props、state及redux关系梳理

    所谓状态机,是一种抽象的数据模型,是“事物发展的趋势”,其原理是事件驱动.广泛地讲,世界万物都是状态机. 一.状态机是一种抽象的数据模型 在react中,props和state都可以用来传递数据.这里 ...

  6. ‘Starting Tomcat v9.0 Server at localhost’ has encountered a problem.

    上述错误是在将Web应用部署到Tomcat,最后一步 右键单击选择Start的时候报错,原因是我在启动Tomcat之前,就已经运行了Tomcat,导致端口被占用.将之前的Tomcat关闭重新启动就可以 ...

  7. Aizu2292 Common Palindromes

    题意 我也不知道哪里来的OJ \(vjudge\) 上的 给定两个字符串 \(S,T\) ,询问 \((i,j,k,l)\) 这样的四元组个数 使得 \(S[i,j],T[k,l]\) 是相等的回文串 ...

  8. 使用WampServer搭建本地PHP环境,绑定域名,配置伪静态

    倡萌之前介绍过 USBWebserver 快速搭建本地PHP环境 ,推荐USBWebserver的原因在于它是绿色的,不需要安装,想使用就手动运行下即可.但是 USBWebserver 也有自身的弱点 ...

  9. css专业术语笔记

    1. 属性 如height.color等,称作css的属性. 2. 值 在css中,如:10px, 50%, #ccc等这些都称作css的值.比较常见的类型值有:整数值,数值,百分比值,长度值,颜色值 ...

  10. laravel开发之-安装laravel-admin

    1.输入命令:composer require encore/laravel-admin "1.4.*" 2.在config/app.php中添加 :Encore\Admin\Pr ...