69,373
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <string.h>
int main()
{
int sfd, cfd;
struct sockaddr_in server_addr;
char buff[10];
//创建套接字
if( (sfd=socket(AF_INET, SOCK_STREAM, 0))<0 ){
perror("create socket error!");
exit(0);
}
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(8888);
server_addr.sin_addr.s_addr = htonl(INADDR_ANY); //通配符地址
//防止服务器关闭后需要等待TIME_WAIT状态才能才继续使用address
int on=1;
if ( setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on))<0 ){
perror("set socket opt fail!\n");
exit(0);
}
//绑定套接字
if( bind(sfd, (struct sockaddr *)&server_addr, sizeof(server_addr))==-1 ){
perror("bind has error!\n");
exit(0);
}
//监听套接字
if( listen(sfd, 10)==-1 ) {
perror("listen has error!\n");
exit(0);
}
//接收客户端
while(1){
puts("waitting for client on 888");
if( (cfd = accept(sfd, (struct sockaddr *)NULL, NULL)) > -1 ) {
printf("new socket fd:%d\n", cfd);
}
int n;
if( (n = recv(cfd, buff, strlen(buff), 0)) < 0 ) {
puts("recv data fail\n");
exit(0);
}
buff[n] = '\0';
printf("recv msg from client: %s\n", buff);
puts(buff);
close(cfd);
}
//关闭close();
close(sfd);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <string.h>
int main()
{
int cfd;
struct sockaddr_in server_addr;
char buff[10];
//创建socket
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(8888);
server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
cfd = socket(AF_INET, SOCK_STREAM, 0);
if( cfd<0 ) {
perror("create socket error\n!");
exit(0);
}
//连接
if( connect(cfd, (struct sockaddr *)&server_addr, sizeof(server_addr)) ==-1 ){
perror("connect has error!\n");
exit(1);
}
printf("connect with destination host...\n");
while(1){
memset(buff, 0, strlen(buff));
scanf("%s", buff);
send(cfd, buff, strlen(buff), 0);
}
//关闭close();
close(cfd);
}