一: 单双工
MyClient.java
/*
* 这是客户端
*/
package com.test1;
//MyClient.java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class MyClient {
public static void main(String[] args) {
MyClient mc1 = new MyClient();
}
public MyClient(){
try {
//Socket()就是去连接某个服务器端, 192.168.159.1是服务器的IP,9999端口号
Socket s = new Socket("192.168.159.1",9999);
//如果socket连接成功,就可以发送数据给服务器
//通过PW,向S写数据 , true表示即时刷新
PrintWriter pw = new PrintWriter(s.getOutputStream(),true);
pw.println("你好我是客户端");
InputStreamReader isr = new InputStreamReader(s.getInputStream());
BufferedReader br = new BufferedReader(isr);
String response = br.readLine();
System.out.println("我是客户端,我收到服务器送回的消息:"+response);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
MyServer.java
/*
* 单双工
*/
package com.test1;
//MyServer.java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class Myserverl {
public static void main(String[] args) {
Myserverl msl = new Myserverl();
}
public Myserverl() {
try {
// 在9999号端口监听
ServerSocket ss = new ServerSocket(9999);
System.out.println("我是服务器,在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("服务器接收到数据是:" + info);
PrintWriter pw = new PrintWriter(s.getOutputStream(),true);
pw.println("我是服务器,你也好");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
二:半双工
MyClient2.java
package com.test2;
//MyClient2.java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class MyClietn2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
MyClietn2 mc = new MyClietn2();
}
public MyClietn2(){
try {
Socket s = new Socket("192.168.159.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")){
s.close();
break;
}
// 接收从服务器发送来的话
String res = br2.readLine();
System.out.println("服务器说 : "+res);
}
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
MyServer2.java
/*
* 服务器 端口号:9999
* 通过控制台,输入会送给客户端的信息 半双工
*/
package com.test2;
//MyServer2.java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class MyServer2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
MyServer2 ms = new MyServer2();
}
public MyServer2() {
try {
// 在端口号9999监听
ServerSocket ss = new ServerSocket(9999);
System.out.println("我是服务器,在9999端口监听。。。");
// 等待连接
Socket s = ss.accept();
// 先接收客户端发送来的消息
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 (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
三:全双工
Myclient3.java
package com.test3;
//Myclient3.java
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.Socket;
import java.net.UnknownHostException;
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 MyClient3 extends JFrame implements ActionListener {
JTextArea jta = null;
JTextField jtf = null;
JScrollPane jsp = null;
JButton jb = null;
JPanel jp1 = null;
PrintWriter pw = null;
public static void main(String[] args) {
MyClient3 my = new MyClient3();
}
public MyClient3() {
jta = new JTextArea();
jsp = new JScrollPane(jta);
jtf = new JTextField(20);
jb = new JButton("发送");
jb.addActionListener(this);
jp1 = new JPanel();
jp1.add(jtf);
jp1.add(jb);
this.add(jsp, "Center");
this.add(jp1, "South");
this.setTitle("QQ简易聊天 客户端");
this.setSize(400, 300);
this.setVisible(true);
try {
//IP为本机IP
Socket s = new Socket("192.168.***.*", 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 (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void actionPerformed(ActionEvent arg0) {
if(arg0.getSource()==jb){
String info = jtf.getText();
// 把客户端发送的信息显示到jta;
jta.append("客户端对服务器说: "+info+"\r\n");
pw.println(info);
jtf.setText("");
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
MyServer3.java
/*
* 全双工
*/
package com.test3;
//MyServer3.java
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 MyServer3 extends JFrame implements ActionListener{
JTextArea jta = null;
JTextField jtf = null;
JScrollPane jsp = null;
JButton jb = null;
JPanel jp1 = null;
// 把信息发送给客户端的对象
PrintWriter pw=null;
public static void main(String[] args) {
MyServer3 my = new MyServer3();
}
public MyServer3() {
jta = new JTextArea();
jsp = new JScrollPane(jta);
jtf = new JTextField(20);
jb = new JButton("发送");
jb.addActionListener(this);
jp1 = new JPanel();
jp1.add(jtf);
jp1.add(jb);
this.add(jsp, "Center");
this.add(jp1, "South");
this.setTitle("QQ简易聊天 服务器");
this.setSize(400, 300);
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 (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource()==jb){
//把服务器在JTF内容发送给客户端
String info = jtf.getText();
jta.append("服务器对客户端说: "+info+"\r\n");
pw.println(info);
// 情况内容
jtf.setText("");
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
test3运行效果图