socket编程实例一个简单的面向socket实例,错在哪里?

socket编程实例  时间:2021-06-09  阅读:()

如何进行 Socket 编程

Socket是网络上运行的两个程序间双向通讯的一端,它既可以接受请求,也可以发送请求,利用它可以较为方便的编写网络上的数据的传递。

在java中,有专门的socket类来处理用户的请求和响应。

利用SOCKET类的方法,就可以实现两台计算机之间的通讯。

这里就介绍一下在JAVA中如何利用socket进行网络编程。

在Java中Socket可以理解为客户端或者服务器端的一个特殊的对象,这个对象有两个关键的方法,一个是getInputStream方法,另一个是getOutputStream方法。

getInputStream方法可以得到一个输入流,客户端的Socket对象上的getInputStream方法得到的输入流其实就是从服务器端发回的数据流。

GetOutputStream方法得到一个输出流,客户端Socket对象上的getOutputStream方法返回的输出流就是将要发送到服务器端的数据流,(其实是一个缓冲区,暂时存储将要发送过去的数据)。

程序可以对这些数据流根据需要进行进一步的封装。

本文的例子就对这些数据流进行了一定的封装(关于封装可以参考Java中流的实现部分)。

一、建立服务器类 Java中有一个专门用来建立Socket服务器的类,名叫ServerSocket,可以用服务器需要使用的端口号作为参数来创建服务器对象。

ServerSocket server = new ServerSocket(9998) 这条语句创建了一个服务器对象,这个服务器使用9998号端口。

当一个客户端程序建立一个Socket连接,所连接的端口号为9998时,服务器对象server便响应这个连接,并且ept()方法会创建一个Socket对象。

服务器端便可以利用这个Socket对象与客户进行通讯。

Socket ing = ept() 进而得到输入流和输出流,并进行封装BufferedReader in = new BufferedReader(new InputStreamReader(ing.getInputStream())); PrintWriter out = new PrintWriter(ing.getOutputStream(),true); 随后,就可以使用in.readLine()方法得到客户端的输入,也可以使用out.println()方法向客户端发送数据。

从而可以根据程序的需要对客户端的不同请求进行回应。

关于VC++ socket如何实现聊天全双工

你这个程序采用udp发送/接收数据,并且使用了阻塞方式的Socket,这样在读数据时会一直等到读到数据后才能执行后面的步骤,写数据时也会等到将全部数据写完才执行后面的步骤。

修改这个程序首先要将创建的Socket改成异步读写的形式,然后使用select函数判断socket是否有数据可读和可以发送数据,并且udp发送的数据包不能过大,一包数据以不超过1392字节为宜。

一个简单的面向socket实例,错在哪里?

问题不少,看一下我修改后的代码,另外在exit前,应该把所有的socket都关闭,虽然默认的系统会在程序退出时自动帮你关掉,但这是一个好的编程习惯,应该自己在程序里关。

#include <sys/types.h> #include <sys/socket.h> #include &/in.h> #include <arpa/.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <strings.h> #define PORT 6677 #define MAXCLIENT 3 int main(int argc,char* argv[]) { int serSock, newConnSock; struct sockaddr_in addr; int addr_len = sizeof(struct sockaddr_in); char msg[] = "e from the server"; int connectedClient[MAXCLIENT], cli; for(cli = 0;cli<MAXCLIENT;cli++) { connectedClient[cli]=0; } serSock = socket(AF_INET, SOCK_STREAM, 0); if(serSock<0) { perror("socket"); exit(1); } else { printf("socket created "); printf("socketd id: %d ",serSock); } bzero(&addr, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_port = htons(PORT); addr.sin_addr.s_addr = htonl(INADDR_ANY); if (bind(serSock, (struct sockaddr*)&addr, sizeof(addr))<0) { perror("connect"); exit(1); } else { printf("connected. "); printf("local port: %d ", PORT); } if (listen(serSock, 3)<0) { perror("listen"); exit(1); } else { printf("listening...... "); } for (cli=0;cli<MAXCLIENT;cli++) { connectedClient[cli] = 0; } cli = 0; while(1) { newConnSock=ept(serSock, (struct sockaddr*)&addr, &addr_len); if (cli >= MAXCLIENT) { printf("socket reach maxsize %d, server ped, current socket %d: ", MAXCLIENT, cli); /* Should close newConnSock and connectedClient[] * before exiting */ exit(0); } if (newConnSock <= 0) { perror("ept"); } else { connectedClient[cli] = newConnSock; write(connectedClient[cli],msg,sizeof(msg)); printf("connected from %s ", _ntoa(addr.sin_addr)); printf("current socket: %d ",connectedClient[cli]); cli++; } printf("running for another loop... "); } }

Raksmart:香港高防服务器/20Mbps带宽(cn2+bgp)/40G-100Gbps防御

RAKsmart怎么样?RAKsmart香港机房新增了付费的DDoS高防保护服务,香港服务器默认接入20Mbps的大陆优化带宽(电信走CN2、联通和移动走BGP)。高防服务器需要在下单页面的IP Addresses Option里面选择购买,分:40Gbps大陆优化高防IP-$461/月、100Gbps国际BGP高防IP-$692/月,有兴趣的可以根据自己的需求来选择!点击进入:RAKsmart官...

CYUN专注海外精品服务器资源 国庆钜惠 最低5折起 限量促销

国庆钜惠 最低5折起 限量促销CYUN专注海外精品服务器资源,主营香港CN2 GIA、美国CERA、美国高防服务器资源,实体公司,ISP/IDC资质齐全,客服配备齐全。本次针对国庆推出非常给力的促销活动,旗下所有平台同享,新老客户同享,限时限量,售完截止。活动截止时间:2021年10月9日官网地址:www.cyun.net参与机型:香港CN2 GIA云服务器、香港双程CN2云服...

ftlcloud(超云)9元/月,1G内存/1核/20g硬盘/10M带宽不限/10G防御,美国云服务器

ftlcloud怎么样?ftlcloud(超云)目前正在搞暑假促销,美国圣何塞数据中心的云服务器低至9元/月,系统盘与数据盘分离,支持Windows和Linux,免费防御CC攻击,自带10Gbps的DDoS防御。FTL-超云服务器的主要特色:稳定、安全、弹性、高性能的云端计算服务,快速部署,并且可根据业务需要扩展计算能力,按需付费,节约成本,提高资源的有效利用率。点击进入:ftlcloud官方网站...

socket编程实例为你推荐
GoldenDBGolden Hind中文什么意思 好像是一个人名或地点之类的词chinapay贝宝和支付宝的区别Honeypotfeedback 歌词翻译orphanremoval我的电脑开机时自检,出现许多这样的字样:Deleting orphan file record segment XXXX (XXXX代表数字)。视频技术短视频运营每天的工作是做什么?需要所学的技术都有什么方面?印度尼西亚国家代码谁知道世界各国的国家电话代码?部署工具win10 评估和部署工具包有什么用asp大马一句话木马中的大马和小马的作用各是什么?审计平台什么是审计工具单元测试规范如何做好小学数学单元测试工作
新加坡虚拟主机 windows虚机 godaddy域名解析 3322动态域名 骨干网 5折 联通c套餐 加勒比群岛 ix主机 搬瓦工官网 idc评测网 表单样式 sub-process 512au godaddy seovip 论坛空间 主机合租 个人域名 圣诞促销 更多