使用java socket来完成程序间 的通讯(单线程)

本文展示了如何使用Java的Socket API进行客户端和服务器端的通信。客户端通过Socket连接到服务器,建立一个双向通信通道。服务器监听特定端口,接收客户端连接,并读取发送的数据。代码示例包括了客户端发送信息到服务器以及服务器接收并打印信息的过程。
摘要由CSDN通过智能技术生成

  Socket的英文原义是“孔”或“插座”。在网络编程中,网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。

        Socket套接字是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。

        Socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。

那么下面我们来进行我们的程序间的通讯

第一段代码是客户端端代码

package 网络及其计算实验;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.*;
 import java.net.Socket;
public class ClientSocket extends Frame {

	
	 public static void main(String[] args) {
		 
		// ClientSocket c1=new ClientSocket("对话框a");
		 try {
			 String str1;
             //初始化一个socket
             Socket socket = new Socket("127.0.0.1", 12138);
             //通过socket获取字符流
             BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
            //通过标准输入流获取字符流
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in, "UTF-8"));
            while ((str1 = bufferedReader.readLine()) != null) {
                //输出打印
                System.out.println("服务器已接受信息 :"+str1);
            }
             while (true) {
                 String str = bufferedReader.readLine();
                 
                 bufferedWriter.write(str);
                 bufferedWriter.write("\n");
                 bufferedWriter.flush();
             }
             
            
         } catch (IOException e) {
             e.printStackTrace();
         }
	     }
}

第二段代码是服务器端

package 网络及其计算实验;
import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.net.ServerSocket;
 import java.net.Socket;
public class ServerSocketTest {
	 public static void main(String[] args) {
		 try {
			             //初始化服务端socket并且绑定9999端口
			            ServerSocket serverSocket = new ServerSocket(12138);
			              //等待客户端的连接
			             Socket socket = serverSocket.accept();
			            //获取输入流,并且指定统一的编码格式
			              BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8"));
			             //读取一行数据
			              String str;
			              //通过while循环不断读取信息,
			              while ((str = bufferedReader.readLine()) != null) {
			                  //输出打印
			                  System.out.println("服务器 : "+str);
			              }
			          } catch (IOException e) {
			              e.printStackTrace();
			         }
     }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值