Java網絡編程基礎篇之單向通信 原創(chuàng)
在網絡編程中如果只要求客戶機向服務器發(fā)送消息,不要求服務器向客戶機發(fā)送消息,稱為單線通信??蛻魴C套接字和服務器套接字鏈接成功后,可估計通過輸出流發(fā)送數(shù)據(jù),服務器則通過輸入流接受數(shù)據(jù),下面是簡單的單向通信的例子。
實例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("服務器套接字已經創(chuàng)建成功");
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();
}
}
運行結果:
服務器套接字已經創(chuàng)建成功
等待客戶機的連接
下面我們再來看一下客戶端程序。
實例2:客戶端程序,實現(xiàn)將用戶在文本框輸入的信息發(fā)送到服務器端,并將文本框中輸入的信息顯示在客戶端的文本域中。代碼如下:
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("向服務器傳送數(shù)據(jù)");
clien.setSize(200,200);
clien.setVisible(true);
clien.connect();
}
}
服務器端運行結果:
服務器套接字已經創(chuàng)建成功
等待客戶機的連接
客戶機:革命尚未成功,同志仍需努力!
客戶端運行結果:
嘗試連接
完成連接
革命尚未成功,同志仍需努力!
說明:
當一臺機器上安裝了多個網絡應用程序,很可能指定的端口號已被占用。還可能遇到以前運行良好的網絡程序突然運行不了的情況,這種情況很可能也是由于端口被別的程序占用了。此時使用命令 netstat -an 來查看該程序所使用的端口。
在這里還有很重要的一點,本文所述兩份源碼,一個是服務器端程序,一個是客戶端程序。運行時一定要先運行服務器端程序,然后運行客戶端程序,而且兩段代碼的端口號一定要相同。
以上就是本文的全部內容,真心希望對大家有所幫助。學習是一件任重道遠的事情,那句老話說得好:革命尚未成功,同志仍需努力!
感謝大家對本站的支持。
相關文章
基于Java+SpringBoot實現(xiàn)人臉識別搜索
人臉識別搜索技術作為現(xiàn)代計算機視覺領域的重要研究方向之一,已經在多個領域展現(xiàn)出巨大的應用潛力,隨著信息技術的飛速發(fā)展,人臉識別搜索在多個領域得到了廣泛關注和應用,本文旨在探討人臉識別搜索技術的背景、原理以及其在實際應用中的意義和挑戰(zhàn)2023-08-08
springboot中報錯Invalid character found in
這篇文章主要介紹了springboot中報錯Invalid character found in the request的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-09-09

