java网络编程语言_Java网络编程基础篇之单向通信

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

发布时间:2020-10-05 13:43:10

来源:脚本之家

阅读:85

作者:司机

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

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

}

}

运行结果:

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

等待客户机的连接

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

实例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 来查看该程序所使用的端口。

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

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

感谢大家对本站的支持。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值