单工通讯方式
/*
* @(#)Server.java
*
*服务器程序,在9999端口监听,可以接收到从客户端发来的消息
* @author
* @version 1.00 2019/3/30
*/
package com.test;
import java.net.*;
import java.io.*;
public class Server {
public static void main(String[] args){
Server server=new Server();
}
public Server() {
try{
ServerSocket ss=new ServerSocket(9999);
System.out.println("I am a Server,I am listening on port 9999.");
//等待某个客户端来,连接,该函数会返回一个Socket连接
Socket s=ss.accept();
//读取s中传递的数据
InputStreamReader isr=new InputStreamReader(s.getInputStream());
BufferedReader br=new BufferedReader(isr);
String info=br.readLine();
System.out.println("Server received "+info);
PrintWriter pw=new PrintWriter(s.getOutputStream(),true);
pw.println("I am server,you are good too!");
}catch(Exception e){
e.printStackTrace();
}
}
}
运行Server.java后,控制台显示:
/**
* @(#)Test.java
*
*客户端单工通讯演示
* @author
* @version 1.00 2019/3/28
*/
package com.test;
import java.io.*;
import java.net.*;
public class Client{
public static void main(String[] args){
Client client=new Client();
}
public Client()
{
try{
//Socket()连接某个服务器端"127.0.0.1"表示服务器ip,也是本机ip,"9999"表示端口号
Socket s=new Socket("127.0.0.1",9999);
//如果连接成功,就可以向服务器发送数据了
PrintWriter pw=new PrintWriter(s.getOutputStream(),true);
pw.println("are you ok? I am Client");
//读取s中传递的数据
InputStreamReader isr=new InputStreamReader(s.getInputStream());
BufferedReader br=new BufferedReader(isr);
String response=br.readLine();
System.out.println("I am Clien,I have received server's returned message:"+response);
}catch(Exception e){
e.printStackTrace();
}
}
}
运行Client.java后控制台显示:
Server.java的控制台显示:
半双工通讯
/*
* @(#)Server.java
*
*服务器程序,在9999端口监听,可以接收到从客户端发来的消息
* @author
* @version 1.00 2019/3/30
*/
package com.test;
import java.net.*;
import java.io.*;
public class Server {
public static void main(String[] args){
Server server=new Server();
}
public Server() {
try{
ServerSocket ss=new ServerSocket(9999);
System.out.println("I am a Server,I am listening on port 9999.");
//等待某个客户端来,连接,该函数会返回一个Socket连接
Socket s=ss.accept();
//读取s中传递的数据,先接收客户端发来的消息
InputStreamReader isr=new InputStreamReader(s.getInputStream());
BufferedReader br=new BufferedReader(isr);
PrintWriter pw=new PrintWriter(s.getOutputStream(),true);
//接收从控制台输入的消息
InputStreamReader isr2=new InputStreamReader(System.in);
BufferedReader br2=new BufferedReader(isr2);
while(true)
{
String infoFromClient=br.readLine();
System.out.println("客户端发来:"+infoFromClient);
if(infoFromClient.equals("bye"))
{
System.out.println("对话结束!");
s.close();//断开连接
break;
}
//接收从控制台输入的消息:
System.out.println("请输入你想对客户端说的话:");
String response=br2.readLine();
//把从控制台接收到的消息回送给客户端
pw.println(response);
}
}catch(Exception e){
e.printStackTrace();
}
}
}
/**
* @(#)Client.java
*
*客户端半双工通讯演示
* @author
* @version 1.00 2019/3/28
*/
package com.test;
import java.io.*;
import java.net.*;
public class Client{
public static void main(String[] args){
Client client=new Client();
}
public Client()
{
try{
//Socket()连接某个服务器端"127.0.0.1"表示服务器ip,也是本机ip,"9999"表示端口号
Socket s=new Socket("127.0.0.1",9999);
//如果连接成功,就可以向服务器发送数据了
PrintWriter pw=new PrintWriter(s.getOutputStream(),true);
InputStreamReader isr=new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(isr);//用于接收键盘输入的消息
InputStreamReader isr2=new InputStreamReader(s.getInputStream());
BufferedReader br2=new BufferedReader(isr2);//用于接收服务器发来的消息
while(true){
System.out.println("请输入你想要对服务器说的话!");
String info=br.readLine();
pw.println(info);
//退出会话
if(info.equals("bye"))
{
System.out.println("对话结束!");
s.close(); //断开连接
break; //退出
}
//接收从服务器发来的消息
String res=br2.readLine();
System.out.println("服务器说:"+res);
}//while
}catch(Exception e){
e.printStackTrace();
}//catch
}
}
简易QQ聊天演示
/*
* @(#)Server.java
*
*服务器程序,在9999端口监听,可以接收到从客户端发来的消息
* @author
* @version 1.00 2019/3/30
*/
package com.test;
import java.net.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import javax.swing.*;
public class Server extends JFrame implements ActionListener{
public static void main(String[] args){
Server server=new Server();
}
JTextArea jta=null;
JTextField jtf=null;
JButton jb=null;
JScrollPane jsp=null;
JPanel jp=null;
PrintWriter pw=null;
public Server()
{
jta=new JTextArea();
jsp=new JScrollPane(jta);//文本域加到滚动面板
jtf=new JTextField(10);//文本编辑区
jb=new JButton("发送");
jb.addActionListener(this);
jp=new JPanel();
jp.add(jtf);//文本编辑区加到面板上
jp.add(jb);//按钮加到面板上
this.add(jsp,"Center");//滚动面板放到中间
this.add(jp,"South");//普通面板放到下面
this.setSize(400,300);
this.setTitle("简易QQ通讯演示...服务器");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
try{
//服务器监听
ServerSocket ss=new ServerSocket(9998);
//等待客户端连接
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){
e.printStackTrace();
}
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
if(e.getSource()==jb)
{
//把服务器在jtf写的内容发给客户端
String info=jtf.getText();
jta.append("服务器:"+info+"\r\n");
pw.println(info);
//清空jtf
jtf.setText("");
}
}
}
/*
* @(#)Client.java
*
*客户端程序
* @author
* @version 1.00 2019/3/30
*/
package com.test;
import java.net.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import javax.swing.*;
public class Client extends JFrame implements ActionListener{
public static void main(String[] args){
Client server=new Client();
}
JTextArea jta=null;
JTextField jtf=null;
JButton jb=null;
JScrollPane jsp=null;
JPanel jp=null;
PrintWriter pw=null;
public Client()
{
jta=new JTextArea();
jsp=new JScrollPane(jta);//文本域加到滚动面板
jtf=new JTextField(10);//文本编辑区
jb=new JButton("发送");
jb.addActionListener(this);
jp=new JPanel();
jp.add(jtf);//文本编辑区加到面板上
jp.add(jb);//按钮加到面板上
this.add(jsp,"Center");//滚动面板放到中间
this.add(jp,"South");//普通面板放到下面
this.setSize(400,300);
this.setTitle("简易QQ通讯演示...客户端");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
try{
//连接服务器
Socket s=new Socket("127.0.0.1",9998);
//读取从服务器发来的消息
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){
e.printStackTrace();
}
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
if(e.getSource()==jb)
{
//把服务器在jtf写的内容发给客户端
String info=jtf.getText();
jta.append("客户端:"+info+"\r\n");
pw.println(info);//表示发送
//清空jtf
jtf.setText("");
}
}
}