Linux-Tcp-IP

时间:2023-03-08 22:46:38
Linux-Tcp-IP
  /* tcpcli.c */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h> #define DEFAULT_PORT 8800 int main(int argc, char** argv)
{
int cPort = DEFAULT_PORT;
int cClient = ;
int cLen = ;
struct sockaddr_in cli;
char cbuf[] = {}; if(argc < )
{
printf("Uasge: client[server IP address]\n");
return -;
} memset(cbuf, , sizeof(cbuf)); cli.sin_family = AF_INET;
cli.sin_port = htons(cPort);
cli.sin_addr.s_addr = inet_addr(argv[]); cClient = socket(AF_INET, SOCK_STREAM, );
if(cClient < )
{
printf("socket() failure!\n");
return -;
} if(connect(cClient, (struct sockaddr*)&cli, sizeof(cli)) < )
{
printf("connect() failure!\n");
return -;
} cLen = recv(cClient, cbuf, sizeof(cbuf),);
if((cLen < )||(cLen == ))
{
printf("recv() failure!\n");
return -;
}
printf("recv() Data From Server: [%s]\n", cbuf); close(cClient); return ;
} //编译代码:gcc -o tcp_clt client_tcp.c //执行命令:./tcp_clt 192.168.0.230 //TCP scoket服务端程序代码 #include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
#include<sys/wait.h>
#include <string.h> /*********************************************************************
*filename: tcpserver.c
*purpose:tcp服务端程序
********************************************************************/
int main(int argc, char ** argv)
{
int sockfd,new_fd;     /* 监听socket: sock_fd,数据传输socket: new_fd */
struct sockaddr_in my_addr; /* 本机地址信息 */
struct sockaddr_in their_addr; /* 客户地址信息 */
unsigned int sin_size, myport, lisnum; if(argv[]) myport = atoi(argv[]);
else myport = ; if(argv[]) lisnum = atoi(argv[]);
else lisnum = ; if ((sockfd = socket(PF_INET, SOCK_STREAM, )) == -) {
perror("socket");
exit();
}
printf("socket %d ok \n",myport); my_addr.sin_family=PF_INET;
my_addr.sin_port=htons(myport);
my_addr.sin_addr.s_addr = INADDR_ANY;
bzero(&(my_addr.sin_zero), );
if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -) {
perror("bind");
exit();
}
printf("bind ok \n"); if (listen(sockfd, lisnum) == -) {
perror("listen");
exit();
}
printf("listen ok \n"); /*
while(1) {
sin_size = sizeof(struct sockaddr_in);
if ((new_fd = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size)) == -1) {
perror("accept");
continue;
} printf("server: got connection from %s\n",inet_ntoa(their_addr.sin_addr));
if (!fork()) { //子进程代码段
if (send(new_fd, "Hello, world!\n", 14, 0) == -1) {
perror("send");
close(new_fd);
exit(0);
}
}
close(new_fd); //父进程不再需要该socket
waitpid(-1,NULL,WNOHANG);//等待子进程结束,清除子进程所占用资源
}
*/ sin_size = sizeof(struct sockaddr_in);
if ((new_fd = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size)) == -) {
perror("accept");
exit();
}
printf("server: got connection from %s\n",inet_ntoa(their_addr.sin_addr)); int step = ;
while() {
char szSnd[] = {};
sprintf(szSnd,"i am server [%d]\n",step);
step++;
if (send(new_fd, szSnd, strlen(szSnd), ) == -) {
perror("send");
close(new_fd);
break;
} printf("send msg: %s \n",szSnd); sleep();
} exit();
}
} //编译指令:gcc -o tcp_srv tcpserver.c //执行服务器端程序:./tcp_srv //创建成功,绑定端口成功,监听成功后,循环发送i am server字符串。