Java网络编程基础篇之单向通信 原创

网友投稿 301 2023-04-08


Java网络编程基础篇之单向通信 原创

在网络编程中如果只要求客户机向服务器发送消息,不要求服务器向客户机发送消息,称为单线通信。客户机套接字和服务器套接字链接成功后,可估计通过输出流发送数据,服务器则通过输入流接受数据,下面是简单的单向通信的例子。

实例1:本实例是一个TCP服务器端程序,在 getserver() 方法中建立服务器套接字,调用getClienMessage()方法获取客户端信息。代码如下:

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.net.ServerSocket;

import java.net.Socket;

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()));

getClienMessage();

}

}catch(Exception e) {

e.printStackTrace();

}

}

private void getClienMessage() {

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(IOException e) {

e.printStackTrace();

}

}

public static void main(String[] args) {

MyTcp tcp = new MyTcp();

tcp.getserver();

}

}

运行结果:

服务器套接字已经创建成功

等待客户机的连接

下面我们再来看一下客户端程序。

&nbwOXUAcsp;       实例2:客户端程序,实现将用户在文本框输入的信息发送到服务器端,并将文本框中输入的信息显示在客户端的文本域中。代码如下:

import java.awt.BorderLayout;

import java.awt.Container;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.PrintWriter;

import java.net.Socket;

import javax.swing.JFrame;

import javax.swing.jscrollPane;

import javax.swing.JTextArea;

import javax.swing.JTextField;

import javax.swing.border.BevelBorder;

public class MyClien extends JFrame{

private PrintWriter writer;

Socket socket;

private JTextArea ta = new JTextArea();

private JTextField tf = new JTextField();

Container cc;

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("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) {

MyClien clien = new MyClien("向服务器传送数据");

clien.setSize(200,200);

clien.setVisible(true);

clien.connect();

}

}

服务器端运行结果:

服务器套接字已经创建成功

等待客户机的连接

客户机:革命尚未成功,同志仍需努力!

客户端运行结果:

尝试连接

完成连接

革命尚未成功,同志仍需努力!

说明:

当一台机器上安装了多个网络应用程序,很可能指定的端口号已被占用。还可能遇到以前运行良好的网络程序突然运行不了的情况,这种情况很可能也是由于端口被别的程序占用了。此时使用命令 netstat -an 来查看该程序所使用的端口。

在这里还有很重要的一点,本文所述两份源码,一个是服务器端程序,一个是客户端程序。运行时一定要先运行服务器端程序,然后运行客户端程序,而且两段代码的端口号一定要相同。

以上就是本文的全部内容,真心希望对大家有所帮助。学习是一件任重道远的事情,那句老话说得好:革命尚未成功,同志仍需努力!

感谢大家对本站的支持。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:struts2简介_动力节点Java学院整理
下一篇:Java读取文件及基于正则表达式的获取电话号码功能详解
相关文章

 发表评论

暂时没有评论,来抢沙发吧~