Java套接字实现网络编程之基础篇

来源:互联网
责任编辑:鲁能
字体:

在windows下用C语言如何实现socket网络编程,需要用到以下头文件和库: 头文件 winsock2.h, 静态库文件 Ws2_32.lib 动态DLL文件 Ws2_32.dll 写一个UDP发送程序的步骤如下: 1. 用WSAStartup函数初始化Socket环境; 2. 用socket函数创建一个套接

   用java开发网络软件非常方便和强大,java的这种力量来源于他独有的一套强大的用于网络的 api,这些api是一系列的类和接口,均位于包java.net和javax.net中。在这篇文章中我们将介绍套接字(socket)慨念,同时以实例说明如何使用network api操纵套接字,在完成本文后,你将具备编写网络低端通讯软件的能力。

这些书我都读过了,全是买的实体书 高级环境编程和两本网络编程其实是相辅相成的 如果想在linux下发展,鸟哥基础篇最好看看,很好 这些学习的前提是要有一定的c语言基础 在学习网络编程时,可以顺便参考一下《tcp/ip详解.卷1》 其实头三本书,已防采集。

什么是套接字(socket)?

你开启了daytime(时间)服务。如果你是winxp,可通过添加删除程序-附件-网络服务-简单tcp/ip服务里添加。 这个服务很简单,只需要往他的端口发送任意数据,都会返回当前时间。 你说的其他ip没有成功,是因为默认没有开启这个服务。 这个服务同防采集。

network api是典型的用于基于tcp/ip网络java程序与其他程序通讯,network api依靠socket进行通讯。socket可以看成在两个程序进行通讯连接中的一个端点,一个程序将一段信息写入socket中,该socket将这段信息发送给另外一个socket中,使这段信息能传送到其他程序中。如图1

把if (!strcmp("tiuq",recvline))改成 if (strstr("tiuq", recvline))试试看,可能是你在终端里面敲的回车符\r也被吸收进去了,然后反转之后变成"\rtiuq",所以strcmp比较不对,换成strstr防采集。

我们来分析一下图1,host a上的程序a将一段信息写入socket中,socket的内容被host a的网络管理软件访问,并将这段信息通过host a的网络接口卡发送到host b,host b的网络接口卡接收到这段信息后,传送给host b的网络管理软件,网络管理软件将这段信息保存在host b的socket中,然后程序b才能在socket中阅读这段信息。

1.TCP流式套接字的编程步骤 在使用之前须链接库函数:工程->设置->Link->输入ws2_32.lib,OK! SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);//创建套接字(socket)。 SOCKADDR_IN addrSrv; addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);防采集。

假设在图1的网络中添加第三个主机host c,那么host a怎么知道信息被正确传送到host b而不是被传送到host c中了呢?基于tcp/ip网络中的每一个主机均被赋予了一个唯一的ip地址,ip地址是一个32位的无符号整数,由于没有转变成二进制,因此通常以小数点分隔,如:198.163.227.6,正如所见ip地址均由四个部分组成,每个部分的范围都是0-255,以表示8位地址。

近日,董明珠公开表示,希望华为手机第一,格力手机第二。相对于董明珠之前“格力手机是世界上最好的手机”言论而言,确实是收敛不少。但是,对于董明珠说希望华为手机第一格力手机第二,董明珠的梦确实也该醒了。日前,华为任正非才召开会议,并明确表示自身与苹果、三星之间的差距,如果内部人员再说超越苹果三星这样的言论,就是直接罚款。华为已经很清楚自身能力,而董明珠还在梦中,对于董明珠的梦。因为就是目前而言,华为手机根本不可能成为第一,格力手机更不可能成为第二,并不是打击国产,而是事实就在面前。在品牌价值上,苹果三星远超华为。在最新的全球品牌价值排行中,虽然苹果名次下滑,但苹果依旧是全球排名第二,三星更是名列前防采集。

值得注意的是ip地址都是32位地址,这是ip协议版本4(简称ipv4)规定的,目前由于ipv4地址已近耗尽,所以ipv6地址正逐渐代替ipv4地址,ipv6地址则是128位无符号整数。

感谢邀请,这个脑洞我认为很有趣,索隆本身的战斗力非常强了,如果要吃什么恶魔果实,我觉得应该是用来补充他的短板和不足的,不然反而会成为他的负担,从这个角度来考虑的话,其实可选择的果实也不太多了,或许我们可以开个脑洞想一想一些比较适合他的果实。首先我想到的是认路果实它的效果类似于我们用的GPS,吃了这种果实的人可以获得认识路的能力(笑)。因为在我看来,索隆要说有什么缺点的话,路痴应该算很严重的一个了,在《海贼王》目前为止的故事里,虽然索隆没有因为迷路惹出什么纰漏,但是也弄出不少让人啼笑皆非的笑话,我们可以肯定,路痴这个设定是尾田老师开的一个小玩笑,但是如果索隆变得对道路非常熟悉的话,无遗会如防采集。

假设第二个程序被加入图1的网络的host b中,那么由host a传来的信息如何能被正确的传给程序b而不是传给新加入的程序呢?这是因为每一个基于tcp/ip网络通讯的程序都被赋予了唯一的端口和端口号,端口是一个信息缓冲区,用于保留socket中的输入/输出信息,端口号是一个16位无符号整数,范围是0-65535,以区别主机上的每一个程序(端口号就像房屋中的房间号),低于256的短口号保留给标准应用程序,比如pop3的端口号就是110,每一个套接字都组合进了ip地址、端口、端口号,这样形成的整体就可以区别每一个套接字t,下面我们就来谈谈两种套接字:流套接字和自寻址数据套接字。

近日,有媒体针对90后消费者做了一次调查。调查显示,90后消费者其实并不抗拒白酒,不过与老一辈人相比,他们更喜欢度数低一些、口感绵柔些的白酒。调查显示,90后中经常喝白酒的人数达到了33%,另有51%的人偶尔喝酒,与70、80后其实并无差别,近期公布的各大酒企的半年报也是一片飘红,那么大家为什么会有年轻一代不喜欢喝白酒的整体印象呢?年轻人对于白酒的抵触来自于传统的饮酒方式及其辛辣味道,对于白酒印象不好的受访者表示,他们讨厌的是传统的酒桌文化,被灌过酒,再就是不喜欢度数太高太辛辣的白酒。虽说当下的白酒市场上,最主要的消费力量依旧是60、70一代,但是80、90的崛起已经不容忽视,而这一部分人很多防采集。

流套接字(stream socket)

除了过敏体质以外,广州人对于食物喜欢度排行上来说个人觉得1海鲜(包括河鲜)2禽类3肉类虽然广州不产海鲜,但是在市中心有一个黄沙海鲜批发市场,是目前华南地区最大的海鲜交易市场、销售来自国内湛江汕尾厦门大连等,还有欧洲等地方的海鲜,可批发可零售,广州市民喜欢吃新鲜原味的食品,海鲜是不二之选,所以说广州人绝对是爱吃海鲜的!欢迎来广州吃海鲜!哈哈防采集。

无论何时,在两个网络应用程序之间发送和接收信息时都需要建立一个可靠的连接,流套接字依靠tcp协议来保证信息正确到达目的地,实际上,ip包有可能在网络中丢失或者在传送过程中发生错误,任何一种情况发生,作为接受方的 tcp将联系发送方tcp重新发送这个ip包。这就是所谓的在两个流套接字之间建立可靠的连接。

流套接字在c/s程序中扮演一个必需的角色,客户机程序(需要访问某些服务的网络应用程序)创建一个扮演服务器程序的主机的ip地址和服务器程序(为客户端应用程序提供服务的网络应用程序)的端口号的流套接字对象。

客户端流套接字的初始化代码将ip地址和端口号传递给客户端主机的网络管理软件,管理软件将ip地址和端口号通过nic传递给服务器端主机;服务器端主机读到经过nic传递来的数据,然后查看服务器程序是否处于监听状态,这种监听依然是通过套接字和端口来进行的;如果服务器程序处于监听状态,那么服务器端网络管理软件就向客户机网络管理软件发出一个积极的响应信号,接收到响应信号后,客户端流套接字初始化代码就给客户程序建立一个端口号,并将这个端口号传递给服务器程序的套接字(服务器程序将使用这个端口号识别传来的信息是否是属于客户程序)同时完成流套接字的初始化。

如果服务器程序没有处于监听状态,那么服务器端网络管理软件将给客户端传递一个消极信号,收到这个消极信号后,客户程序的流套接字初始化代码将抛出一个异常对象并且不建立通讯连接,也不创建流套接字对象。这种情形就像打电话一样,当有人的时候通讯建立,否则电话将被挂起。

这部分的工作包括了相关联的三个类:inetaddress, socket, 和 serversocket。 inetaddress对象描绘了32位或128位ip地址,socket对象代表了客户程序流套接字,serversocket代表了服务程序流套接字,所有这三个类均位于包java.net中。

inetaddress类

inetaddress类在网络api套接字编程中扮演了一个重要角色。参数传递给流套接字类和自寻址套接字类构造器或非构造器方法。inetaddress描述了32位或64位ip地址,要完成这个功能,inetaddress类主要依靠两个支持类inet4address 和 inet6address,这三个类是继承关系,inetaddrress是父类,inet4address 和 inet6address是子类。资讯转帖于 Xue163.com_JAVA认证考试题库

扩展阅读,根据您访问的内容系统为您准备了以下扩展内容,希望对您有帮助。

求推荐一本介绍套接字编程的教程(socket、网络编程)

《Windows网络编程技术》附件是电子版的,你可以先看看如果觉得可以请买原版书。

个人觉得这书还不错

更多追问追答追问众里寻他千百度,蓦然回首竟在此处!粗看了一下,这本书确实是本好书,不过貌似没有原始套接字的内容,我查找了全文并没有搜索到SOCK_RAW追答

好吧,再给你个私家珍藏的,这个有RAW  SOCKKET的

刚才那个弄错了,这个才是

Java网络编程如何初始化套接字

不同的构造方法不仅带的参数不同,所具有的意义也不一样。下面分别解析这两个类的实例初始化过程。 ServerSocket 实例的初始化 ServerSocket 类提供了四个构造器: public Socket(String host, int port) throws UnknownHostException, IOException public Socket(InetAddress address, int port) throws IOException public Socket(String host, int port, InetAddress localAddr, int localPort) throws IOException public Socket(InetAddress address, int port, InetAddress localAddr, int localPort) throws IOException public Socket() public Socket(Proxy proxy) 带参构造器用来创建已绑定的服务器套接字,也就是说构造成功后它就已经开始侦听指定的端口,且能够调用 accept() 方法来接受客户端连接。默认构造器则会创建未绑定的服务器套接字,构造成功后必须手动将其绑定到一个本地地址才能用,在绑定之前可以进行一些选项配置。 带参构造器 总的来说,带参构造器提供了三个参数: port 指定该服务器套接字所要侦听的本地端口。如果为 0,则由系统自动分配一个端口号,这必须以另外的方式让客户端获取端口号。 backlog 这个名词目前还没有合适的译名。底层系统的 TCP 实现会维护一个连接队列,该队列缓存了已被 TCP 处理完毕,但还没有被服务器套接字接受的客户端连接。一旦某个连接被接受(通过调用 accept() 方法),它就会被从队列中移除。backlog 参数就用于指定队列的最大长度,默认值为 50,但这个值只是一个建议,底层系统可能根据需要自动调整。如果队列满了,则其行为是平台相关的:微软的 WINSOCK 会拒绝新的连接,其他实现则什么都不做。严格地说,微软没有遵守规范,破坏了游戏规则…… bindAddr 一台机器可能会有多个本地 IP 地址,例如同时使用多块网卡。使用其他两个带参构造器时,该参数为 null,服务器套接字会在所有的本地 IP 地址(0.0.0.0 或 ::0)上侦听。如果希望只侦听一个地址,则可使用该参数。 默认构造器 如果使用默认构造器,在绑定地址前,还可以做些配置。绑定操作由两个 bind 方法定义,参数类似于带参构造器。配置项包括以下方面(都必须在绑定前配置): 设置是否重用本地地址 该选项由 setReuseAddress(boolean on) 方法配置,对应底层系统的 SO_REUSEADDR 套接字选项。JDK 没有定义该选项的默认值。如果该选项为 false,则在关闭 TCP 连接时,为了保证可靠性,该连接可能在关闭后的一段时间(大约两分钟)内保持超时状态(通常称为 TIME_WAIT 状态或 2MSL 等待状态),这段时间里无法将新建的服务器套接字绑定到同一个地址。在开发阶段,服务器可能不断重启,打开改选项会非常有用。 设置接收缓冲区大小 该选项由 setReceiveBufferSize(int size) 方法配置,对应底层系统的 SO_RCVBUF 套接字选项,单位是字节。《RFC 1323 - TCP Extensions for High Performance》将缓冲区大小定义为 64KB。该选项只是一个建议值,底层系统可能根据需要自行调整。 设置超时值 该选项由 setSoTimeout(int timeout) 方法配置,对应底层系统的 SO_TIMEOUT 套接字选项,单位是毫秒。默认值为 0。该选项影响 accept 方法的阻塞时间长度,如果超时将引发 SocketTimeoutException。如果设为 0,则表示永不超时。 设置性能首选项 性能首选项包括连接时间、延迟和带宽三个选项,由 setPerformancePreferences(int connectionTime, int latency, int bandwidth) 方法配置。这三个数值分别表示短连接时间、低延迟和高带宽的相对重要性,数值越大则越重要;其各自的绝对值没有意义。该方法的初衷是为了让 Java 能在用非 TCP/IP 实现的套接字环境下工作得更好,某些需要对网络进行调优的程序也可以将这三个首选项作为配置参数提供给用户。 Socket 实例的初始化 Socket 类提供了六个公共构造器(已过时的除外): public Socket(String host, int port) throws UnknownHostException, IOException public Socket(InetAddress address, int port) throws IOException public Socket(String host, int port, InetAddress localAddr, int localPort) throws IOException public Socket(InetAddress address, int port, InetAddress localAddr, int localPort) throws IOException public Socket() public Socket(Proxy proxy) 前四个构造器创建已连接的客户端套接字,也就是说构造的时候就会去连接服务器。前两个构造器需要提供服务器的地址和端口作为参数,本地地址和端口由系统自动分配;后两个允许手动指定本地地址和端口,但极少使用。后两个构造器创建未连接的套接字,创建后需要调用 connect 方法手动连接,连接之前可以做一些配置。最后一个构造器接受一个代表代理服务其的 Proxy 对象,JDK 支持 HTTP 和 SOCKS(V4 或 V5)两种代理类型。 连接前的配置 在连接前,客户端套接字不仅像服务器套接字那样可以设置是否重用本地地址、缓冲区大小、超时值和性能首选项,还能够配置以下各项(都必须在连接前配置): 设置是否保持活跃 该选项由 setKeepAlive(boolean on) 方法配置,对应底层系统的 SO_KEEPALIVE 套接字选项。默认值为 false。如果打开该选项,则套接字会定期自动发送保持活跃的探测性消息,类似于心跳检测。根据《RFC 1122 - Requirements for Internet Hosts》的规定,保持活跃机制只是 TCP 的一个可选功能,如果支持的话,默认必须为 false,而且这种机制默认在成功建立连接后,且连续两小时没有数据传输的情况下才会被激活。从另一方面来看,通过套接字的 I/O 操作完全可以知道连接是否还有效,所以该选项的实用价值不大。 设置是否收发带外数据 该选项由 setOOBInline(boolean on) 方法配置,对应底层系统的 SO_OOBINLINE 套接字选项。默认值为 off。带外数据(Out-of-band Data)也叫做紧急数据,表示数据很重要,需要使用不同于发送普通数据的一个专用通道来发送。打开该选项后,就可以调用 sendUrgentData(int data) 方法发送一个字节的紧急数据。JDK 对带外数据只提供了有限支持,紧急数据将会和普通数据一起被收到,并且无法自动区分。该选项对应用开发人员意义不大。 设置是否从容关闭连接 该选项由 setSoLinger(boolean on, int linger) 方法配置,对应底层系统的 SO_LINGER 套接字选项。默认为 false。该选项只会影响套接字的关闭,其中的 linger 参数表示超时时间,单位为秒。如果打开改选项:如果将 linger 设为 0,则关闭套接字的时候,未发送的数据会被丢弃,且另一端会出现连接被同位体重置的异常;如果 linger 非 0,则关闭套接字的线程将被阻塞,直到数据全部发送或超时,超时后的行为与底层系统相关,JDK 无法控制。如果关闭该选项,则套接字正常关闭,数据也会全部发送。由于底层实现的差异性,不提倡应用开发人员打开该选项。 设置是否延迟发送数据 该选项由 setTcpNoDelay(boolean on) 方法配置,对应底层系统的 TCP_NODELAY TCP 选项。默认值为 off。打开该选项将禁用 Nagle 算法,TCP 包会立即发送;关闭该选项则会启用 Nagle 算法,多个较小的 TCP 包会被组合成一个大包一起发送,虽然发送延迟了,但有利于避免网络拥塞。默认为 false。该选项对实时性很强的程序可能有用,但一般的程序不需要关心。 设置流量类别 该选项由 setTrafficClass(int tc) 方法配置,对应底层系统的“流量类别”套接字属性。该选项用于向网络(例如路由器)提示从该套接字发送的包需要获取哪些服务类型,对本地 TCP 协议栈没有影响。IPv4 和 IPv6 分别定义了多个不同的值,例如 IPv4 将 0x08 定义为最大吞吐量,0x10 定义为最小延迟,等等。可以用或运算将多个值合并为一个选项。该选项用来调整性能,需要根据实际情况设置。由于只是建议值,可能被网络忽略。

java socket网络编程

//==============Server.java=================//

import java.io.IOException;

import java.net.ServerSocket;

import java.net.Socket;

public class Server {

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

ServerSocket s = new ServerSocket(12345);

System.out.println("服务器就绪,请启动客户端.");

Socket so = s.accept();

byte[] buff = new byte[1024];

int read = so.getInputStream().read(buff);

String[] abc=new String(buff,0,read).split("\\D+");

int a = Integer.parseInt(abc[0]);

int b = Integer.parseInt(abc[1]);

int c = Integer.parseInt(abc[2]);

if(!cbt(a,b,c))

so.getOutputStream().write("输入的数据无法组成三角形.".getBytes());

else

so.getOutputStream().write(getArea(a,b,c).getBytes());

so.getOutputStream().flush();

so.close();

s.close();

}

private static String getArea(int a, int b, int c) {

float s = (a+b+c)/2f;

return "面积: "+Math.sqrt(s*(s-a)*(s-b)*(s-c));

}

private static boolean cbt(int a, int b, int c) {

return a>0&&b>0&&c>0&&a+b>c&&b+c>a&&a+c>b;

}

}

//=================Client.java======================//

import java.io.IOException;

import java.net.Socket;

import java.net.UnknownHostException;

public class Client {

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

System.out.println("输入三角形的三边并用逗号隔开,如: (3,4,5) ");

byte[] buff=new byte[64];

int r = System.in.read(buff);

String ipaddr = "localhost";//根据情况改变,在本机调试就不改了

Socket so = new Socket(ipaddr,12345);

so.getOutputStream().write(new String(buff,0,r).getBytes());

r = so.getInputStream().read(buff);

so.close();

String rs = new String(buff,0,r);

System.out.println(rs);

}

}

//先启动Server,再启动Client

www.powayart.com true http://www.powayart.com/kao/58/589154.html report 92420 Java套接字实现网络编程之基础篇,用java开发网络软件非常方便和强大,java的这种力量来源于他独有的一套强大的用于网络的api,这些api是一系列的类和接口,均位于包java.net和javax.net中。在这篇文章中我们将介绍套接字(socket)慨念,同时以实例说明如何使用n...
娱乐时尚
历史文化
真视界
旅游美食
精彩图文
我爱我车
母婴健康
关于本站 | 广告服务 | 手机版 | 商务合作 | 免责申明 | 招聘信息 | 联系我们
Copyright © 2004-2018 book1234.com All Rights Reserved. 布客网 版权所有
京ICP备10044368号-1 京公网安备11010802011102号
教育考试: 学历财经建筑 医药公考资格外语电脑作文招聘中小学留学 文档 移民 文库专栏23问答中心z资讯z资讯1资讯涨资讯涨资讯1资讯问答图书馆知识IT编程数码信息解决方案信息中心IT科技问答新闻中心软件教室设计大全网络相关英语学习开发编程考试中心参考范文管理文库营销中心站长之家IT信息中心商学院数码大全硬件DIY企业服务网吧在线百科硬件知识手机平板汽车游戏家电精彩摄影现代家居IT女人经验健康养生猎奇创业攻略教育学习历史时尚潮流最近更新涨知识
广东11选5 广东11选5 传奇私服_中国 传奇私服考查询 最新的传奇私服发布网 北京快3 江苏快3 北京快3 吉林快三 搜狐彩票网 天津快乐十分开奖结果 广西快3 搜狐彩票网 贵州快三 三河市| 林州市| 朔州市| 共和县| 宁乡县| 法库县| 米易县| 清徐县| 乡城县| 贵南县| 忻州市| 伊春市| 富裕县| 万安县| 威海市| 成武县| 宁陵县| 宁国市| 正镶白旗| 偏关县| 都安| 洪江市| 额尔古纳市| 吴忠市| 淮北市| 富蕴县| 安龙县| 灵宝市| 收藏| 无棣县| 昂仁县| 安新县| 崇左市| 泰州市| 买车| 怀安县| 庆阳市| 威远县|