博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
网络编程(转发自“软件思维”)
阅读量:5900 次
发布时间:2019-06-19

本文共 2671 字,大约阅读时间需要 8 分钟。

要进行网络编程,首先要搞清楚目的是什么。

网络编程说简单点就是在网络上的计算机进行数据的交互。

既然要进行数据交互,那就需要有一个发送方和一个接受方。

按网络上的说法,就是一个攻一个受·

当然,现阶段网上的电脑一般来说都是既接受数据,也能发送数据的,所以说这些电脑都是“插座型”的,进可攻,退可受!!!

好吧,还是使用专业点的名字吧:客户端/服务器

 

那么具体到两台电脑,它们是如何来交互数据的呢?请看下图:


从步骤来分析:

 

一、服务器端程序

    1.1创建一个服务器套接字(ServerSocket),并绑定到指定端口。

    1.2侦听来自客户端的请求,如果接受到连接则返回套接字对象(socket)。

    1.3获得输入/输出流,也就是进行数据的接收或发送。

    1.4关闭套接字(socket)。

二、客户端程序

    2.1创建一个套接字,向服务器指定商品发送请求。

    2.2与服务器正确连接后开始数据的接收或发送。

    2.3关闭套接字。

 

步骤分析完了,接下来就是实施了。

服务器端代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public 
class 
MyServer {
    
private 
static 
final 
int 
SERVER_PORT = 
9527
// 指定侦听端口
 
    
public 
MyServer() {
        
try 
{
            
ServerSocket ss = 
new 
ServerSocket(SERVER_PORT); 
// 创建服务器套接字
            
System.out.println(
"服务端已启动,正在等待客户端..."
);
            
Socket s = ss.accept(); 
// 侦听来自客户端的请求
            
InputStream in = s.getInputStream(); 
// 获得输入流,用来接收数据
            
OutputStream out = s.getOutputStream(); 
// 获得输出流,用来发送数据
            
byte
[] buf = 
new 
byte
[
1024
]; 
// 数据缓存
            
int 
len = in.read(buf); 
// 从输入流中读取数据
            
String strFromClient = 
new 
String(buf, 
0
, len);
            
System.out.print(
"来自客户端的信息>>"
);
            
System.out.println(strFromClient);
            
String strToClient = 
"我也很好!"
;
            
out.write(strToClient.getBytes()); 
// 往输出流中发送数据
            
// 关闭输入流和输出流
            
in.close();
            
out.close();
            
// 关闭通信套接字和服务器套接字
            
s.close();
            
ss.close();
            
System.out.println(
"服务端已关闭。"
);
        
catch 
(IOException e) {
            
e.printStackTrace();
        
}
    
}
     
    
public 
static 
void 
main(String[] args) {
        
MyServer ms = 
new 
MyServer();
    
}
}

客户端代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public 
class 
MyClient {
    
private 
static 
final 
int 
SERVER_PORT = 
9527
;  
//服务器的侦听端口
    
public 
MyClient() {
        
try 
{  
            
//由于服务端也是运行在本机,所以创建本机的InetAddress对象
            
InetAddress address = InetAddress.getByName(
"localhost"
);
            
Socket s = 
new 
Socket(address, SERVER_PORT);  
//向服务器侦听端口发出请求
            
System.out.println(
"客户端已启动。"
);
            
InputStream in = s.getInputStream();     
//获得输入流,用来接收数据
            
OutputStream out = s.getOutputStream();  
//获得输出流,用来发送数据
            
String strToServer = 
"你好!"
;
            
out.write(strToServer.getBytes());   
//往输出流中发送数据
            
byte
[] buf = 
new 
byte
[
1024
];
            
int 
len = in.read(buf);              
//从输入流中读取数据
            
String strFromServer = 
new 
String(buf, 
0
, len);  
            
System.out.print(
"来自服务端的回答>>"
);
            
System.out.println(strFromServer);
            
in.close();out.close();  
//关闭输入流和输出流
            
s.close();               
//关闭通信套接字
            
System.out.println(
"客户端已关闭。"
);
        
catch 
(UnknownHostException nhe) {
            
System.out.println(
"未找到指定主机..."
);
        
catch 
(IOException ioe) { 
            
ioe.printStackTrace();
        
}
    
}
     
    
public 
static 
void 
main(String[] args) {
        
MyClient mc = 
new 
MyClient();
    
}
}

 

先运行服务器端

 

再运行客户端,可以发现服务器端的内容发生了变化

再切换到客户端的输出窗口

客户端的输出内容如下:

 

有兴趣的看官可以修改代码,让它变成可以从控制台反复输入文字来交互。研究得更深些的朋友,可以尝试发送文件。

网络编程最基本的内容到这儿就结束了,此处应有点赞!!!

 

 “软件思维”博客地址:,,感兴趣的小伙伴可以去看相关的其它博文。 

转载于:https://www.cnblogs.com/TYDBLOG/p/7598503.html

你可能感兴趣的文章
IBM Bluemix初识
查看>>
storm 大牛博文
查看>>
HDU 4348 To the moon (主席树区间更新)
查看>>
hdu 三部曲 Cash Machine
查看>>
将数组a中n个整数按相反顺序存放
查看>>
spring data JPA
查看>>
最后的MSN
查看>>
手把手教你做出好看的文本输入框
查看>>
构造方法的重载
查看>>
Python_xml
查看>>
Directory获取方式
查看>>
服务器导出数据附加到本地
查看>>
Active Directory、Exchange、单点登录,企业账号统一管理解决方案
查看>>
Linux下安装SVN
查看>>
ffmpeg中的flv parser,demuxer,splitter
查看>>
Linux查看硬盘使用情况
查看>>
z-index 应用简单总结
查看>>
访问cv::Mat中的数据时遇到的指针类型问题
查看>>
并查集的一般操作 ②
查看>>
0505.Net基础班第二十一天(基础加强总复习)
查看>>