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...
");
}
}
官方网站:点击访问创梦网络宿迁BGP高防活动方案:机房CPU内存硬盘带宽IP防护流量原价活动价开通方式宿迁BGP4vCPU4G40G+50G20Mbps1个100G不限流量299元/月 209.3元/月点击自助购买成都电信优化线路8vCPU8G40G+50G20Mbps1个100G不限流量399元/月 279.3元/月点击自助购买成都电信优化线路8vCPU16G40G+50G2...
百驰云成立于2017年,是一家新国人IDC商家,且正规持证IDC/ISP/CDN,商家主要提供数据中心基础服务、互联网业务解决方案,及专属服务器租用、云服务器、云虚拟主机、专属服务器托管、带宽租用等产品和服务。百驰云提供源自大陆、香港、韩国和美国等地骨干级机房优质资源,包括BGP国际多线网络,CN2点对点直连带宽以及国际顶尖品牌硬件。专注为个人开发者用户,中小型,大型企业用户提供一站式核心网络云端...
Dataideas是一家2019年成立的国外VPS主机商,提供基于KVM架构的VPS主机,数据中心在美国得克萨斯州休斯敦,主机分为三个系列:AMD Ryzen系列、Intel Xeon系列、大硬盘系列,同时每个系列又分为共享CPU和独立CPU系列,最低每月1.5美元起。不过需要注意,这家没有主页,你直接访问根域名是空白页的,还好他们的所有套餐支持月付,相对风险较低。下面以Intel Xeon系列共...
socket编程实例为你推荐
李智慧韩智慧的全部资料应用雷达雷达是干什么用的?virusscan为什么解压文件显示VirusScan 警报!不能解压!怎么回事怎么解决高手来oa办公系统下载OA在哪里下载?小四号字word里的小四号字在Photoshop里是指多少点字体?awv请问awv是什么样的格式啊?什么是生态系统什么是生态环境?微软操作系统下载微软原版xp系统下载网址是哪个啊?有没有免费就可以下载的?审计平台什么是审计工具labelforhtml标签中lable的for属性有什么作用?
域名城 hawkhost优惠码 linode rak机房 56折 suspended godaddy支付宝 免费ftp空间申请 cpanel空间 谁的qq空间最好看 服务器合租 鲁诺 vip域名 paypal注册教程 优酷黄金会员账号共享 丽萨 秒杀品 独立主机 免费网络空间 国内空间 更多