微创客笔记之Socket编程

微创客笔记系列

啥? 微创客写笔记了!

一学期即将结束,微创客将在接下来的时间里,有时间便推送自己对于java,matlab, SQL, 基本的算法,特别是神经网络算法的笔记,供大家参考。鄙人不才,有知识错误,敬请大家批评指正!

本期,俺就先推Socket通信编程吧!

对于大多数小伙伴来说,Socket编程几乎成为程序员必须掌握的知识点之一,对于它的重要性,俺在这里就不多废话了,有时间整理这些历史故事,发掘背后的力量!

首先,我们补一下计算机网络知识:

1. 数据传输层最重要的两个协议:

UDP数据包协议:(user datagram protocol 用户数据报文协议)

TCP数据传输协议:(transfer control protocol 传输控制协议)

2. 简单地说两个协议的异同点:

UDP传输不可靠,TCP传输数据可靠;

可靠和不可靠的区别:主要是数据传输时的数据的传输准确率;

TCP在传输数据前,需要确定好传输对方的是否在线;(确定性的传输);

UDP在传输前,没有确定传输对象的特点(消耗大量的网络资源);

3. 两种网络模型:OSI模型; Tcp/Ip模型;

4. 网络通信的要素:计算机网络通信本质是什么:是两台计算机之间应用进程之间的通信;

a) 使用TCP/IP协议;

b) 对方的IP地址;(唯一的标识计算机)

c) 端口号;(标识应用进程)

d) 传输协议;

5. Stack的编程:ip地址+端口号,套接字;

1. 数据在sokact 之间的IO传输;

2. Java.net中包含了许多的互联网的协议(IP地址)

3. Socket通信主要经过三次握手的操作:

客户端发送信息;

服务器端接受信息并且响应传回给客户端;

客户端再次发送信息;

具体的实现代码(java版):

服务器端代码:

import java.util.*;

import java.net.*;

import java.io.*;

class Sever_Socket {

public static final int PORT=8080;/**端口号*/

public static void main(String args[]) throws IOException{

SeverSocket s=new SeverSocket(PROT);/**服务器端连接客户端的端口*/

System.out.println("Started:"+s);

try{

Socket socket=s.accept();/**监听客户端发来的信息*/

try{

System.out.println("Connection accepted:"+socket);

BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));/**读取客户端发来的输出流*/

PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWtriter(socket.getOutputStream())),true);/**写入客户端发来的输出流存放到缓冲区*/

while(true){/**判断客户端发来的信息*/

String str=in.readLine();/**要求换行的标识符*/

if(str.equals("END")){

break; }

System.out.println("echoing:"+str);/**输出读取的字符段*/

out.println(str+str+"嘻嘻");

客户端代码:

import java.io.*;

import java.net.*;

import java.util.*;

class Client_Socket{

public static void main(String args[]) throws IOException{

InetAddress addr=InetAddress.getByName(null);/**获取本地计算机得名称*/

System.out.println("addr="+addr);

Socket socket=new Socket(addr,Sever_Socket.PORT);/**客户端确定端口号和计算机名称*/

try{

System.out.println("socket="+socket);

Buffereader on =new Buffereader(new InputStreamReader(socket.getInputStream()));/**接受服务器端的响应*/

PrintWriter out =new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);/**将服务器端的数据写入缓冲区*/

for(int i=0;i

out.println("呵呵"+i);

String str=in.readLine();

Syatem.out.println(str);/**输出数据*/ }

out.println("END"); }

finally{

System.out.println("closing...");

socket.close();/**关闭资源*/ }

}

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180526G1JN9P00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券