单工通讯方式

/*
 * @(#)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后,控制台显示:
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后控制台显示:
java 网络编程基础
Server.java的控制台显示:
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();
    	}
    }    
}

java 网络编程基础

/**
 * @(#)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
 	}
 }

java 网络编程基础

简易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("");
		}
	}
}

java 网络编程基础

/*
 * @(#)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("");
		}
	}  
}

java 网络编程基础

相关文章: