TCP程序设计基础

文章目录

  • InetAddress类
  • TCP网络程序
    • TCP服务器端程序
    • 客户端程序
    • 运行步骤及结果
      • 先运行服务器端代码
      • 再运行客户端代码
      • 在客户端弹出的窗体的输入框输入文字,然后回车
      • 客户端输入的文字会在服务器端输出

InetAddress类

package 网络通信;

import java.net.*;
/*
 * InetAddress类
 * */
public class Address {
     

	public static void main(String[] args) {
     
		InetAddress ip;
		try {
     
			ip = InetAddress.getLocalHost();
			String localname = ip.getHostName();
			String localip = ip.getHostAddress();
			System.out.println("本机名:" + localname);
			System.out.println("本机IP地址:" + localip);
		} catch (UnknownHostException e) {
     
			e.printStackTrace();
		}

	}

}

TCP程序设计基础_第1张图片

TCP网络程序

TCP服务器端程序

package 网络通信;

import java.io.*;
import java.net.*;

/**
 * 服务器端运行
 */

public class MyTcp {
     
	private BufferedReader reader;
	private ServerSocket server;
	private Socket socket;

	void getserver() {
     
		try {
     
			server = new ServerSocket(8998);
			System.out.println("服务器套接字已经创建成功");
			while (true) {
     
				System.out.println("等待客户机的连接");
				socket = server.accept();
				reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
				getClientMessage();
			}
		} catch (Exception e) {
     
			e.printStackTrace();
		}
	}

	private void getClientMessage() {
     
		try {
     
			while (true) {
     
				System.out.println("客户机:" + reader.readLine());
			}
		} catch (Exception e) {
     
			e.printStackTrace();
		}
		try {
     
			if (reader != null) {
     
				reader.close();
			}
			if (socket != null) {
     
				socket.close();
			}
		} catch (Exception e) {
     
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
     
		MyTcp tcp = new MyTcp();
		tcp.getserver();

	}

}

客户端程序

注意IP地址,根据实际情况更改,否则会出错

package 网络通信;

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;

import javax.swing.*;
import javax.swing.border.*;

public class MyClien extends JFrame {
      // 创建类继承JFrame类
	/**
	 * 客户端运行
	 */
	private static final long serialVersionUID = 1L;
	private PrintWriter writer; // 声明PrintWriter类对象
	Socket socket; // 声明Socket对象
	private JTextArea ta = new JTextArea(); // 创建JtextArea对象
	private JTextField tf = new JTextField(); // 创建JtextField对象
	Container cc; // 声明Container对象
	
	public MyClien(String title) {
      // 构造方法
		super(title); // 调用父类的构造方法
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		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() {
     
			// 绑定事件
			public void actionPerformed(ActionEvent e) {
     
				// 将文本框中信息写入流
				writer.println(tf.getText());
				// 将文本框中信息显示在文本域中
				ta.append(tf.getText() + '\n');
				ta.setSelectionEnd(ta.getText().length());
				tf.setText(""); // 将文本框清空
			}
		});
	}
	
	private void connect() {
      // 连接套接字方法
		ta.append("尝试连接\n"); // 文本域中提示信息
		try {
      // 捕捉异常
			socket = new Socket("192.168.10.111", 8998); // (服务器端ip)实例化Socket对象
			writer = new PrintWriter(socket.getOutputStream(), true);
			ta.append("完成连接\n"); // 文本域中提示信息
		} catch (Exception e) {
     
			e.printStackTrace(); // 输出异常信息
		}
	}
	
	public static void main(String[] args) {
      // 主方法
		MyClien clien = new MyClien("向服务器送数据"); // 创建本例对象
		clien.setSize(200, 200); // 设置窗体大小
		clien.setVisible(true); // 将窗体显示
		clien.connect(); // 调用连接方法
	}
}

运行步骤及结果

先运行服务器端代码

TCP程序设计基础_第2张图片

再运行客户端代码

TCP程序设计基础_第3张图片

在客户端弹出的窗体的输入框输入文字,然后回车

TCP程序设计基础_第4张图片

客户端输入的文字会在服务器端输出

TCP程序设计基础_第5张图片

你可能感兴趣的:(Java,java,socket)