首页 技术 正文
技术 2022年11月6日
0 收藏 670 点赞 802 浏览 2198 个字
  • 客户端代码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<unistd.h>
#include<netinet/in.h>
#include <errno.h> int main(int argc, char** argv){ int socketfd = ;
char sendbuf[];
char recvbuf[];
struct sockaddr_in server_addr;
int port = ;
int nbytes; if((socketfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == ){
fprintf(stderr, "socket Error:%s\n\a", strerror(errno));
exit();
} bzero(&server_addr, sizeof(struct sockaddr_in));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(port);
server_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); if((connect(socketfd, &server_addr, sizeof(server_addr))) == -){
fprintf(stderr, "connect Error:%s\n\a", strerror(errno));
exit();
} while(){ nbytes = recv(socketfd, recvbuf, sizeof(recvbuf), );
recvbuf[nbytes] = '\0'; printf("recv data is:%s\n",recvbuf); printf("Input:");
scanf("%s", sendbuf); send(socketfd, sendbuf, sizeof(sendbuf), MSG_NOSIGNAL);
} close(socketfd); exit();
}
  • 服务器端代码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<unistd.h>
#include<netinet/in.h>
#include <signal.h>
#include <errno.h>int main(int argc, char** argv){
int old_fd,new_fd;
struct sockaddr_in server_addr;
struct sockaddr_in client_addr;
char recvbuf[];
int port = ;
int len,nbytes; if((old_fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == ){
fprintf(stderr, "socket Error:%s\n\a", strerror(errno));
exit();
} bzero(&server_addr, sizeof(struct sockaddr_in));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(port);
server_addr.sin_addr.s_addr = htonl(INADDR_ANY); if((bind(old_fd, &server_addr, sizeof(server_addr))) == -){
fprintf(stderr, "bind Error:%s\n\a", strerror(errno));
exit();
} //listen的第二个参数backlog为内核缓存队列长度,该队列针对每个监听套接字包含两个队列:
//一是未完成三次握手的,二是完成三次握手的
if(listen(old_fd, ) == -){
fprintf(stderr, "listen Error:%s\n\a", strerror(errno));
exit();
} while(){
len = sizeof(struct sockaddr_in);
if ((new_fd = accept(old_fd,
(struct sockaddr *)&client_addr,
&len)) == -) {
fprintf(stderr, "Accept error:%s\n\a", strerror(errno));
exit();
} while(){
if (send(new_fd, "hello fredric", strlen("hello fredric"), MSG_NOSIGNAL) == -) {
fprintf(stderr, "send error:%s\n", strerror(errno));
exit();
} nbytes = recv(new_fd, recvbuf, sizeof(recvbuf), );
recvbuf[nbytes] = '\0'; printf("recv data is:%s\n",recvbuf);
} close(new_fd);
} close(old_fd);
exit();
}
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,082
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,556
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,406
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,179
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,815
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,898