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... "); } }

天上云月付572元,起香港三网CN2直连,独立服务器88折优惠,香港沙田机房

天上云怎么样?天上云隶属于成都天上云网络科技有限公司,是一家提供云服务器及物理服务器的国人商家,目前商家针对香港物理机在做优惠促销,香港沙田机房采用三网直连,其中电信走CN2,带宽为50Mbps,不限制流量,商家提供IPMI,可以自行管理,随意安装系统,目前E3-1225/16G的套餐低至572元每月,有做大规模业务的朋友可以看看。点击进入:天上云官方网站天上云香港物理机服务器套餐:香港沙田数据中...

racknerd新上架“洛杉矶”VPS$29/年,3.8G内存/3核/58gSSD/5T流量

racknerd发表了2021年美国独立日的促销费用便宜的vps,两种便宜的美国vps位于洛杉矶multacom室,访问了1Gbps的带宽,采用了solusvm管理,硬盘是SSDraid10...近两年来,racknerd的声誉不断积累,服务器的稳定性和售后服务。官方网站:https://www.racknerd.com多种加密数字货币、信用卡、PayPal、支付宝、银联、webmoney,可以付...

PIGYun中秋特惠:香港/韩国VPS月付14元起

PIGYun发布了九月份及中秋节特惠活动,提供8折优惠码,本月商家主推中国香港和韩国机房,优惠后最低韩国每月14元/中国香港每月19元起。这是一家成立于2019年的国人商家,提供中国香港、韩国和美国等地区机房VPS主机,基于KVM架构,采用SSD硬盘,CN2+BGP线路(美国为CUVIP-AS9929、GIA等)。下面列出两款主机配置信息。机房:中国香港CPU:1core内存:1GB硬盘:10GB...

socket编程实例为你推荐
股价图简单易懂的股票图外加说明eagleeye电脑进程中出现Eaglesvr这种程序,据说是一种蠕虫病毒。。。怎样杀掉?数据监测毕业论文检测,万方数据检测结果可靠吗?跟知网的有多少差距啊?求以往学长学姐解释。orphanremovalhibernate一对多,操作一的一方,如何删除多的一方的数据。oa办公系统下载OA在哪里下载?扫图问个非常白痴的问题撒,扫图是什么意思?awv如何把普通电影转换成AWV数据挖掘项目怎样利用大数据挖掘农业项目发展前景什么是生态系统生态系统的我主要特征是什么?腾讯贴吧QQ贴吧图标灭了后该怎样再点亮?
双线vps 中文域名交易中心 搬瓦工官网 kddi 香港托管 国外免费空间 免费mysql 腾讯云分析 共享主机 泉州移动 广州服务器 根服务器 宏讯 永久免费空间 注册阿里云邮箱 中国联通宽带测试 阵亡将士纪念日 汤博乐 七十九刀 tracker服务器 更多