📄 simplesocket.txt
字号:
// Server2.c 多客户端Socket简单编程 - 服务器
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/wait.h>
#define MYPORT 3490
#define BACKLOG 10
#define MAXDATASIZE 100
void *doClientThead(void *pParam)
{
char buf[MAXDATASIZE];
int cilentSocket=(int)pParam;
int numbytes;
while(1)
{
if ((numbytes=recv(cilentSocket , buf, MAXDATASIZE, 0)) == -1) {
perror("接收信息错误");
break;
}
if(numbytes==0)
{
printf("客户端退出\n");
break;
}
buf[numbytes] = '\0';
printf("收到来自客户端<%d>的信息: %s\n",cilentSocket,buf);
}
close(cilentSocket);
printf("客户端 socket 已正常关闭!\n");
close(cilentSocket);
}
main()
{
int sockfd, new_fd;
struct sockaddr_in my_addr;
struct sockaddr_in their_addr;
int sin_size;
int numbytes;
pthread_t pt;
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
perror("socket创建失败");
exit(1);
}
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(MYPORT);
my_addr.sin_addr.s_addr = INADDR_ANY;
bzero(&(my_addr.sin_zero), 8);
if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1) {
perror("绑定端口失败");
exit(1);
}
if (listen(sockfd, BACKLOG) == -1) {
perror("监听端口失败");
exit(1);
}
printf("服务器已经开始监听3490端口!\n");
while(1) {
sin_size = sizeof(struct sockaddr_in);
if ((new_fd = accept(sockfd, (struct sockaddr *)&their_addr, &sin_size)) == -1) {
perror("接收信息错误");
continue;
}
printf("服务器已取得得来自客户端 %s的连接!\n", inet_ntoa(their_addr.sin_addr));
if (send(new_fd, "连接成功\n", 12, 0) == -1){
perror("发送连接信息失败");
continue;
}
//创建客户端进程
if(pthread_create(&pt,NULL,doClientThead,(void *)new_fd)!=0){
printf("客户端<%d>创建线程失败!\n",new_fd);
exit(1);
}
}
}
// Client2.c 多客户端Socket简单编程 - 客户端
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/wait.h>
#define PORT 3490
#define MAXDATASIZE 100
int main()
{
int sockfd, numbytes;
char buf[MAXDATASIZE];
struct hostent *he;
struct sockaddr_in their_addr;
char argv[15];
int n;
printf("请输入服务器IP地址:\n");
scanf("%s",argv);
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
perror("socket创建失败");
exit(1);
}
their_addr.sin_family = AF_INET;
their_addr.sin_port = htons(PORT);
if(inet_aton(argv, &their_addr.sin_addr)==0)
{
perror("输入ip格式错误!");
exit(1);
}
bzero(&(their_addr.sin_zero), 8);
if (connect(sockfd, (struct sockaddr *)&their_addr, sizeof(struct sockaddr)) == -1) {
perror("连接服务器失败");
exit(1);
}
if ((numbytes=recv(sockfd, buf, MAXDATASIZE, 0)) == -1) {
perror("与服务器连接失败");
exit(1);
}
buf[numbytes] = '\0';
printf("%s,你已经可以向服务器发送信息了!\n",buf);
printf("请输入信息后按回车或空格建即可发送,退出请按ctrl+c!\n");
while(1)
{
scanf("%s",buf);
n=strlen(buf);
if (!fork()) {
if (send(sockfd, buf, n+1, 0) == -1)
{
perror("发送失败");
exit(1);
}
printf("发送成功,信息已发送到服务器!\n");
}
}
close(sockfd);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -