单向通信
服务器端:
/**
* 这是服务器端,让它在9999端口监听
*/
package Test1netServer;
import java.net.*;
import java.io.*;
public class MyServer {
public static void main(String[]args){
MyServer ms=new MyServer();
}
public MyServer(){
try {
//在9999端口监听
ServerSocket ss=new ServerSocket(9999);
System.out.println("我是服务器,我正在9999端口监听...");
//等待某个客户端来连接,该函数会返回一个Socket
Socket s=ss.accept();
//接收客户端发来的信息
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) {
e.printStackTrace();
}
}
}
客户端:
/**
* 这是客户端
*/
package Test1netClient;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class MyClient {
public static void main(String []args){
MyClient mc=new MyClient();
}
public MyClient(){
try {
//Socket()来连接某个服务器端 ip+端口号
Socket s=new Socket("192.168.174.1",9999);
//向服务器端发送数据,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 (IOException e) {
e.printStackTrace();
}
}
}
结果:
MyServer:
我是服务器,我正在9999端口监听...
服务器接收到:你好,我是客户端
MyClient:
客户端收到:你好客户端,我是服务器
双向通信(一方说一句)
服务器端:
/**
* 服务器
* 通过控制台输入与客户端通信
*/
package Test2netServer;
import java.net.*;
import java.io.*;
public class MyServe2 {
public static void main(String []args){
MyServe2 ms2=new MyServe2();
}
public MyServe2(){
try {
//在9999端口监听
ServerSocket ss=new ServerSocket(9999);
System.out.println("我是服务器,正在等待连接...");
//等待连接
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);
//向客户端发送从控制台输入的信息
System.out.println("请输入对客户端发送的信息:");//提示
pw.println(br2.readLine());
// if(br2.readLine().equals("bye")){
// System.out.println("服务器退出");
// s.close();
// break;
// }
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
客户端:
/**
* 客户端
* 通过在控制台输入信息向服务器发送
*/
package Test2netClient;
import java.io.*;
import java.net.*;
public class MyClient2 {
public static void main(String []args){
MyClient2 mc2=new MyClient2();
}
public MyClient2(){
try {
//连接服务器
Socket s=new Socket("192.168.174.1",9999);
//从控制台输入信息
InputStreamReader isr=new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(isr);
//发送给服务器
PrintWriter pw=new PrintWriter(s.getOutputStream(),true);
//收到回应
InputStreamReader isr2=new InputStreamReader(s.getInputStream());
BufferedReader br2=new BufferedReader(isr2);
while(true){
//将控制台输入的信息发给服务器
System.out.println("请输入信息发给服务器:");//提示
pw.println(br.readLine());
// if(br.readLine().equals("bye")){
// System.out.println("客户端退出");
// s.close();
// break;
// }
//收到服务器的回应
String resFromServer=br2.readLine();
System.out.println("收到回应:"+resFromServer);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
结果:
MyServer2:
我是服务器,正在等待连接...
服务器收到:你好服务器,我是客户端
请输入对客户端发送的信息:
你好客户端,我是服务器
服务器收到:123
请输入对客户端发送的信息:
456
MyClient2:
请输入信息发给服务器:
你好服务器,我是客户端
收到回应:你好客户端,我是服务器
请输入信息发给服务器:
123
收到回应:456
请输入信息发给服务器:
实现简易版qq
服务端:
package Test5netServer;
/**
* 全双工服务器端,让它在9999端口监听
* 可以接收客户端发来的数据
*/
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.*;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
public class MyServer5 extends JFrame implements ActionListener {
JTextArea jta;
JTextField jtf;
JButton jb;
JPanel jp1;
JScrollPane jsp;
InputStreamReader isr;
BufferedReader br;
PrintWriter pw;
public static void main(String[] args) {
new MyServer5();
}
//构造函数
public MyServer5() {
jta = new JTextArea();
jtf = new JTextField(20);
jb = new JButton("发送");
jb.addActionListener(this);
//给jb发送按钮添加快捷键(回车)事件
jb.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "fasong");
jb.getActionMap().put("fasong", new AbstractAction() {
public void actionPerformed(ActionEvent e) {
String info = jtf.getText();
jta.append("服务端 对 客户端说:" + info + "\r\n");
pw.println(info);
jtf.setText("");
}
});
jp1 = new JPanel();
jp1.add(jtf);
jp1.add(jb);
jsp = new JScrollPane(jta);
this.add(jsp, "Center");
this.add(jp1, "South");
this.setTitle("qq简易聊天--服务端");
this.setSize(350, 250);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
try {
//在9999号端口上监听
ServerSocket ss = new ServerSocket(9999);
//等待客户端连接
Socket s = ss.accept();
//读取从客户端发来的信息
isr = new InputStreamReader(s.getInputStream());
br = new BufferedReader(isr);
pw = new PrintWriter(s.getOutputStream(), true);
while (true) {
//读取从客户端发来的信息
String info = br.readLine();
jta.append("客户端 对 服务端说:" + info + "\r\n");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (pw != null) pw.close();
if (br != null) br.close();
if (isr != null) isr.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
@Override
public void actionPerformed(ActionEvent e) {
//如果用户按下发送信息的按钮
if (e.getSource() == jb) {
//把服务器在jtf写的 内容发送给客户端
String info = jtf.getText();
//向jta中不断追加内容
jta.append("服务端 对 客户端说:" + info + "\r\n");
pw.println(info);
//清空jtf内容
jtf.setText("");
}
}
}
客户端:
package Test5netClient;
/**
* 这是一个客户端程序,可以连接服务器端口9999
*/
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.*;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
public class MyClient5 extends JFrame implements ActionListener{
JTextArea jta;
JTextField jtf;
JButton jb;
JPanel jp1;
JScrollPane jsp;
InputStreamReader isr;
BufferedReader br;
PrintWriter pw;
public static void main(String[] args) {
new MyClient5();
}
public MyClient5(){
jta=new JTextArea();
jtf=new JTextField(20);
jtf.setFocusable(true);
jb=new JButton("发送");
jb.addActionListener(this);
//给jb发送按钮添加快捷键(回车)事件
jb.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "fasong");
jb.getActionMap().put("fasong", new AbstractAction() {
public void actionPerformed(ActionEvent e) {
String info=jtf.getText();
jta.append("客户端 对 服务端说:"+info+"\r\n");
pw.println(info);
jtf.setText("");
}
});
jp1=new JPanel();
jp1.add(jtf);
jp1.add(jb);
jsp=new JScrollPane(jta);
this.add(jsp,"Center");
this.add(jp1,"South");
this.setTitle("qq简易聊天--客户端");
this.setSize(350, 250);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
try {
//Socket()就是去连接某个服务器端 127.0.0.1表示服务器的ip
Socket s=new Socket("127.0.0.1",9999);
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();
}finally{
try {
if(pw!=null) pw.close();
if(br!=null) br.close();
if(isr!=null) isr.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource()==jb){
String info=jtf.getText();
jta.append("客户端 对 服务端说:"+info+"\r\n");
pw.println(info);
jtf.setText("");
}
}
}