A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨银川 黑马帝   /  2011-12-21 21:13  /  1900 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨银川 于 2011-12-21 23:55 编辑

想问一下,有哪位大侠可以形象的给我说说套接字socket啊,看了API文档,感觉还是很抽象,还有我们java有Socket,那么别的呢,听毕老师说在网络编程中很重要,有多重要呢,如果能举几个实例更好了,谢谢

评分

参与人数 1技术分 +1 收起 理由
吴上储 + 1

查看全部评分

3 个回复

倒序浏览
刘健 黑马帝 2011-12-21 21:45:21
沙发
套接字在我看来就是路,就像路由高速公路,普通公路一样,套接字也有UDP和TCP,实现的都是网络连接,方式不一样而已

评分

参与人数 1技术分 +1 收起 理由
吴上储 + 1

查看全部评分

回复 使用道具 举报
Socket(套接字/插座):
Socket是为网络服务提供的一种机制;通信的两端都有Socket;网络通信其实就是Socket间的通信;数据在两个Socket间通过IO传输。 (可以把Socket理解为码头,由船进行装货卸货来实现码头间数据的传输)。  PS:Socket网络编程主要掌握其流程,代码查文档即可。

同时,在学习网络编程时,必须重点掌握理解两个传输协议:UDP和TCP
UDP(用户数据报协议):将数据及源和目的地址封装成数据包,不需要建立连接(即:面向无连接);每个数据报的大小限制在64k内;因无连接,是不可靠协议;不需要连接地址,速度快。  如:网络聊天、网络视频、桌面共享都可以利用UDP传输
TCP(传输控制协议):建立连接,形成传输数据的通道;在连接中进行大数据量传输;通过三次握手完成连接,是可靠协议;必须建立连接,效率会稍低。  如:电话通话、下载

下面通过代码进行举例说明:
要求:客户端给服务端发送数据,服务端收到后,给客户端反馈信息。
客户端: 1,建立socket服务,指定要连接主机和端口。
2,获取socket流中的输出流,将数据写到该流中,通过网络发送给服务端。
3,获取socket流中的输入流,将服务端反馈的数据获取到,并打印。
4,关闭客户端资源。
import java.io.*;
import java.net.*;

class TcpClient2 {
        public static void main(String[] args)throws Exception {
                Socket s = new Socket("localhost",10004);
               
                OutputStream out = s.getOutputStream();
                out.write("服务端,你好".getBytes());       
       
                InputStream in = s.getInputStream();
                byte[] buf = new byte[1024];
                int len = in.read(buf);
                System.out.println(new String(buf,0,len));

                s.close();
        }
}

class TcpServer2{
        public static void main(String[] args) throws Exception{
                ServerSocket ss = new ServerSocket(10004);
                Socket s = ss.accept();
                String ip = s.getInetAddress().getHostAddress();
                System.out.println(ip+"....connected");

                InputStream in = s.getInputStream();
                byte[] buf = new byte[1024];
                int len = in.read(buf);
                System.out.println(new String(buf,0,len));

                OutputStream out = s.getOutputStream();
                Thread.sleep(10000);
                out.write("哥们收到,你也好".getBytes());
                s.close();
                ss.close();
        }
}


想了解更多关于Socket网络编程的知识,可以看看毕向东老师关于Java讲解的第23天内容!
希望我的解答能对你有所帮助!

评分

参与人数 1技术分 +2 收起 理由
吴上储 + 2

查看全部评分

回复 使用道具 举报
套接字Socket有两部分组成,一部分是IP地址,另一部分是端口号。
两个计算机通信准确的来说是两个计算机的进程进行通信的。
IP地址是用来在网络中找到目的主机的,端口号是用来获取目的主机中相应的进程。
其中的编码中用到的TCP,UDP都是对Socket做了进一步的封装。
如果楼主在大学期间学习过计算机网络这门课程的话,相信你就会很清楚。

评分

参与人数 1技术分 +1 收起 理由
吴上储 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马