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

10gbiz:香港/洛杉矶CN2直连线路VPS四折优惠,直连香港/香港/洛杉矶CN2四折

10gbiz怎么样?10gbiz在本站也多次分享过,是一家成立于2020的国人主机商家,主要销售VPS和独立服务器,机房目前有中国香港和美国洛杉矶、硅谷等地,线路都非常不错,香港为三网直连,电信走CN2,洛杉矶线路为三网回程CN2 GIA,10gbiz商家七月连续推出各种优惠活动,除了延续之前的VPS产品4折优惠,目前增加了美国硅谷独立服务器首月半价的活动,有需要的朋友可以看看。10gbiz优惠码...

Gcore(gcorelabs)俄罗斯海参崴VPS简单测试

有一段时间没有分享Gcore(gcorelabs)的信息了,这是一家成立于2011年的国外主机商,总部位于卢森堡,主要提供VPS主机和独立服务器租用等,数据中心包括俄罗斯、美国、日本、韩国、新加坡、荷兰、中国(香港)等多个国家和地区的十几个机房,商家针对不同系列的产品分为不同管理系统,比如VPS(Hosting)、Cloud等都是独立的用户中心体系,部落分享的主要是商家的Hosting(Virtu...

Sharktech云服务器35折年付33美元起,2G内存/40G硬盘/4TB流量/多机房可选

Sharktech又称SK或者鲨鱼机房,是一家主打高防产品的国外商家,成立于2003年,提供的产品包括独立服务器租用、VPS云服务器等,自营机房在美国洛杉矶、丹佛、芝加哥和荷兰阿姆斯特丹等。之前我们经常分享商家提供的独立服务器产品,近期主机商针对云虚拟服务器(CVS)提供优惠码,优惠后XS套餐年付最低仅33.39美元起,支持使用支付宝、PayPal、信用卡等付款方式。下面以XS套餐为例,分享产品配...

socket编程实例为你推荐
视频压缩算法MP4视频压缩,比特率如何计算。activitygroup请问在activitygroup中嵌入多个webview,切换时如何保持状态网络备份怎样手动备份宽带帐号密码网站推广软件破解版免费的网站推广软件,破解版embed函数datedif是什么函数哈?value又是什么函数哈软件开发技术文档软件开发文档重要吗?第三方支付系统→第三方支付平台有哪些鸿道集团王老吉、鸿道集团、加多宝集团、广药公司是怎么回事?中国黑客网介绍几个黑客网。在线代理浏览器您的系统已配置为使用代理,但UC浏览器无法连接到此代理。
云主机租用 科迈动态域名 韩国空间 gomezpeer 魔兽世界台湾服务器 100m独享 ca187 闪讯官网 空间租赁 我的世界服务器ip godaddy空间 1美元 中国电信宽带测速 wordpress空间 phpwind论坛 防盗链 饭桶 挂马检测工具 nano 华为云服务器宕机 更多