Socket编写服务器和客户端程序实现TCP通信

1 篇文章 0 订阅
0 篇文章 0 订阅

又是一天JAVA作业:使用swing编写一个服务器和客户端程序。在他们之间实现TCP通信。程序启动后,客户端程序在窗口的文本框中输入内容。点击发送按钮时向服务器端发送文本框中的文本。服务器端收到信息后。反馈 ok。并在客户端窗口显示。
根据Socket握手原则,握手肯定有双方的手呀,那么简单的道理就用简单代码实现。
简单上代码吧,不难实现。
简单分为两个部分:服务器程序和客户端程序
分别是GetTCP和SendTCP

SentTCP.java

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.net.*;
import javax.swing.*;
import javax.swing.border.BevelBorder;

//1、使用swing编写一个服务器和客户端程序。在他们之间实现TCP通信。程序启动后,客户端程序在窗口的文本框中输入内容。点击发送按钮时向服务器端发送文本框中的文本。
//服务器端收到信息后。反馈 ok。并在客户端窗口显示。

public class SentTCP extends JFrame{
	private PrintWriter writer;
	Socket socket;
	private JTextArea ta = new JTextArea();
	private JTextField tf = new JTextField();
	Container cc;
	public SentTCP(String title) {
		super(title);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);			//结束窗口所在的应用程序。在窗口被关闭的时候会退出JVM
		cc=this.getContentPane();
		final JScrollPane scrollPane=new JScrollPane();
		scrollPane.setBorder(new BevelBorder(BevelBorder.RAISED));
		getContentPane().add(scrollPane,BorderLayout.CENTER);
		scrollPane.setViewportView(ta);
		cc.add(tf,"South");
		tf.addActionListener(new ActionListener(){
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				writer.println(tf.getText());					//将文本框中的信息写入流
				ta.append(tf.getText()+"\n");					//将文本框中的信息显示在文本域中
				ta.setSelectionEnd(ta.getText().length());      
				tf.setText("");									//将文本框清空
				
			}
			//绑定事件
		});
		
		
	}
	
	private void connect() {
		// TODO Auto-generated method stub
		ta.append("尝试与服务器连接\n");
		try {
			socket = new Socket("127.0.0.1",8998);
			writer = new PrintWriter(socket.getOutputStream(),true);
			ta.append("完成连接\n");
		}catch(Exception e) {
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args) {
		SentTCP tcp = new SentTCP("向服务器发送数据");
		tcp.setSize(200,200);
		tcp.setVisible(true);
		tcp.connect();
		
	}

	
}

GetTCP.java

import java.awt.BorderLayout;
import java.awt.Container;
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.*;
import javax.swing.border.BevelBorder;

public class GetTCP extends JFrame{
	private BufferedReader reader;
	private ServerSocket server;
	private Socket socket;
	Container cc;
	private PrintWriter writer;
	private JTextArea ta = new JTextArea();
	public GetTCP() {
			setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);			//结束窗口所在的应用程序。在窗口被关闭的时候会退出JVM
			cc=this.getContentPane();
			final JScrollPane scrollPane=new JScrollPane();
			scrollPane.setBorder(new BevelBorder(BevelBorder.RAISED));
			getContentPane().add(scrollPane,BorderLayout.CENTER);
			scrollPane.setViewportView(ta);
	}
	
	void getServer() {
		try {
			server = new ServerSocket(8998);//实例化Socket对象
			ta.append("服务器套接字已经创建成功\n");
			while(true) {//如果套接字是连接状态
				ta.append("等待客户机的连接\n");
				socket=server.accept();//实例化socket对象
				reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));//实例化bufferedReader对象
				getClientMessage();
			}
		}catch(Exception e) {
			e.printStackTrace();
		}
	}
	
	private void getClientMessage() {
		// TODO Auto-generated method stub
		try {
			while(true) {//如果套接字段是连接状态
				ta.append("客户机:"+reader.readLine()+"\n");
				
			}
		}catch(Exception e) {
			e.printStackTrace();
		}
		try {
			if(reader!=null) {
				reader.close();//关闭流
			}
			if(socket!=null) {
				socket.close();//关闭套字
			}
		}catch(IOException e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		GetTCP tcp = new GetTCP();
		tcp.setSize(300,300);
		tcp.setVisible(true);
		tcp.getServer();
	}
}

实现老师的要求就在这里了,大家可以根据具体要求细化代码。

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值